LocalizedStringKit 是一款工具,可让您直接在源代码中编写英语字符串,并在稍后生成所需的 .strings 文件。无需再手动管理字符串键或记住稍后将它们添加到 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 文档。
应用程序和库需要能够访问字符串 bundle。为此,我们将进行一些基本设置
LocalizedStringKit
的文件夹。LocalizedStringKit.bundle
的新文件夹(这将使其成为 bundle)。磁盘结构现在看起来像
ProjectName/
├── LocalizedStringKit/
| ├── LocalizedStringKit.bundle/
要利用多个 bundle 中字符串的 bundleName 分段,您还需要创建这些 bundle。
LocalizedStringKit
文件夹。<bundleName>.bundle
的新文件夹(这将使其成为 bundle)。确保将 bundleName
替换为您将在源代码中使用的区分大小写的 bundleName。在您的源代码中,添加如下代码
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
标志。如果 source_strings.m
存在于 repo 中,它会将 repo 的状态与该文件进行比较,如果存在差异,则返回非零退出代码。如果该文件不存在,则 check 标志将始终返回非零退出代码。
是的,当然可以。只需 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")
在这种情况下,英语字符串和扩展名(在本例中为 Verb
或 Noun
)将在哈希处理之前连接,以生成键,从而使这两种情况具有不同的键。键扩展可以是您喜欢的任何字符串。
默认情况下,.strings
文件采用旧的 OpenStep plist 格式。当您通过 Xcode 使用标准功能时,它会在构建时自动将这些文件转换为二进制 plist。使用此过程的自定义 bundle,这种情况不再自动发生。但是,要修复它,相对简单。只需在您的主应用程序构建阶段添加一个新的运行脚本阶段,并将以下行添加到其中
find "${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/LocalizedStringKit.bundle" -name "LocalizedStringKit.strings" -exec plutil -convert binary1 {} \;
在构建时,您的二进制文件中的文件现在将被压缩。
是的,它在 Swift Package Index 上列出,此处
此项目欢迎贡献和建议。大多数贡献都要求您同意贡献者许可协议 (CLA),声明您有权并将实际授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA,并适当地修饰 PR(例如,状态检查、评论)。只需按照机器人提供的说明进行操作即可。您只需在使用我们 CLA 的所有仓库中执行此操作一次。
本项目已采用 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则常见问题解答 或通过 opencode@microsoft.com 联系 opencode@microsoft.com 提出任何其他问题或意见。