跳转到主要内容

直接从您的代码生成(strings)文件

项目描述

LocalizedStringKit

PyPi Version License LocalizedStringKit Logo

LocalizedStringKit 是一个工具,允许您直接在源代码中编写英文字符串,稍后生成所需的 .strings 文件。不再需要手动管理字符串键或记住稍后将其添加到字符串文件中。您只需更改

label.text = NSLocalizedString("TERMS_SCREEN_MAIN_HEADER", "Comment here...")

label.text = Localized("Terms and Conditions", "Comment here...")

然后您就可以开始了。

入门

应用程序库

工具的应用程序部分由 LocalizedStringKit 库提供支持。

推荐使用 Carthage 来消费此库。需要在您的 Cartfile 中添加的行是:github "Microsoft/localizedstringkit"

对于任何问题,请参考 Carthage 文档。

字符串包

应用程序和库需要能够访问字符串包。为此,我们需要进行一些基本设置

主要包

  1. 在您的应用程序项目中创建一个名为 LocalizedStringKit 的文件夹。
  2. 在该文件夹内,创建一个名为 LocalizedStringKit.bundle 的新文件夹(这将使其成为一个包)。
  3. 将此包添加到您的 Xcode 项目中
  4. 确保将此包复制到您的应用程序主包中(即使您将在框架中使用它)。

磁盘结构现在看起来可能如下所示

ProjectName/
├── LocalizedStringKit/
|   ├── LocalizedStringKit.bundle/

次要包(s): bundleNames

为了利用多个包中字符串的 bundleName 分段,您还需要创建这些包。

  1. 导航到在主要设置中创建的第一个 LocalizedStringKit 文件夹。
  2. 在该文件夹内,创建一个名为 <bundleName>.bundle 的新文件夹(这将使其成为一个包)。请确保用您在源中使用的大小写敏感的 bundleName 替换 bundleName
  3. 将此包添加到您的 Xcode 项目中
  4. 确保将此包复制到您的应用程序主包中(即使您将在框架中使用它)。

创建一些新的字符串

在您的源代码中添加一些代码,例如

label.text = Localized("My new string", "A comment")

记得也在文件中 import LocalizedStringKit

生成您的字符串

现在一切准备就绪,可以生成 .strings 文件。为此,您需要我们用来生成字符串文件的工具。这是一个 Python 工具,可以通过运行 pip install localizedstringkit 安装。

工具安装后,只需运行 localizedstringkit -h,它将显示如何调用它。以下是一个示例

localizedstringkit \
--path /path/to/my/project/root \
--localized-string-kit-path /path/to/my/project/root/LocalizedStringKit

这将扫描 /path/to/my/project/root/ 中的所有 Swift 和 Objective-C 文件,提取任何对 Localized 的调用,并生成 en.lproj/LocalizedStringKit.strings 文件。它还将生成一个 source_strings.m 文件作为中间步骤。此文件保留下来,因为它允许快速运行 localizedstringkit --check 命令。如果您愿意,可以将其添加到您的 .gitignore 中。

就是这样。现在您已经可以使用 LocalizedStringKit 了。

注意:如果您使用 Carthage 进行安装,请记得在命令中添加 --exclude Carthage(或您的路径)以避免标记库本身。

常见问题解答

我如何使这个工具更快?

我们知道这个工具有点慢。不幸的是,我们无法做太多来加快它的速度。相反,我们已经开发了一个 --check 标志,可以用来。如果 repo 中存在 source_strings.m 文件,它将比较 repo 的状态与该文件,如果有差异,则返回非零退出代码。如果该文件不存在,检查标志将始终返回非零退出代码。

这个可以当作库使用吗?

当然可以。只需 import localizedstringkit

如何迁移现有字符串?

没有内置的迁移现有字符串的方法,但这样做相对简单。首先按照上面的设置步骤操作。然后,将所有的 NSLocalizedString 调用转换为 Localized 调用,用英文字符串替换你的手动键。然后运行上面提到的生成脚本。之后,你需要通过类似的过程移动你的翻译。

冲突如何处理?

如果你有两个相同的字符串,它们将被“合并”。也就是说,它们将共享相同的键,但注释将被附加。在 LocalizedStringKit.strings 文件中的结果看起来可能像这样

/* Text on button which when tapped will send an email message to a user
   Text on button which when tapped will send a message to the support team */
"1432f32780bbd9cde496343b060fd75d" = "Send Message";

然而,有些情况下你可能不希望发生这种情况。例如,你可能有一个单词 Schedule 作为显示用户每日日程的屏幕的标题,但也是一个可以点击以安排会议的按钮。在这个例子中,单词一个是名词,另一个是动词。在其他语言中,这些通常会是不同的单词,因此你需要确保它们得到唯一的翻译。为此,你可以使用键扩展。例如

// Heading
title.text = LocalizedWithKeyExtension("Schedule", "Title for a screen which shows the users daily schedule", "Noun")

// Button
button.text = LocalizedWithKeyExtension("Schedule", "Text for a button which will schedule the meeting currently displayed on screen.", "Verb")

在这种情况下,英文字符串和扩展(在这个例子中是 VerbNoun)将在散列之前连接起来生成键,导致这两个情况有不同的键。键扩展可以是任何你喜欢的字符串。

为什么我的应用程序在这样做之后变大了?

默认情况下,.strings 文件位于旧的 OpenStep plist 格式。当你通过 Xcode 使用标准功能时,它在构建时自动将这些转换为二进制 plist。但是,在这个过程的自定义包中,这不会自动发生。然而,要修复这个问题,相对简单。只需在你的主应用程序构建阶段添加一个新的运行脚本阶段,并将其中的以下行添加到其中

find "${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/LocalizedStringKit.bundle" -name "LocalizedStringKit.strings" -exec plutil -convert binary1 {} \;

在构建时,你的二进制文件中的文件现在将被压缩。

这是否通过 Swift 包管理器提供?

是的,它在 Swift 包索引中列出 这里

贡献

此项目欢迎贡献和建议。大多数贡献需要你同意贡献者许可协议(CLA),声明你有权,并且实际上确实授予我们使用你的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com

当你提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并适当地装饰 PR(例如,状态检查、评论)。只需遵循机器人提供的说明。你只需在整个使用我们的 CLA 的存储库中进行一次。

此项目采用了 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则常见问题解答 或通过 opencode@microsoft.com 联系以提出任何额外的问题或评论。

项目详情


下载文件

下载适合您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

localizedstringkit-0.2.6.tar.gz (14.7 kB 查看散列)

上传于 源代码

构建分发

localizedstringkit-0.2.6-py3-none-any.whl (13.9 kB 查看哈希值)

上传于 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面