LocalizedStringKit 0.2.5

LocalizedStringKit 0.2.5

Dale MyersAfraz Siddiqui 维护。



  • 作者
  • Dale Myers

LocalizedStringKit

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/

二级包(们):packageNames

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

  1. 导航到第一次创建的主LocalizedStringKit文件夹。
  2. 在该文件夹内部,创建一个新的文件夹命名为<packageName>.bundle(这将将其转换成一个包)。请确保用您在源代码中将使用的某些敏感性包名称替换packageName
  3. 将此包添加到您的Xcode项目中
  4. 确保此包被复制到您的主应用程序包中(即使您将在框架中使用它)。

创建一些新的字符串

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

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

记得也要在文件中导入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文件中,如果 preferred。

这样就完成了。您现在可以使用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 Package Manager可用吗?

是的,它在Swift Package Index上的列表中此处

贡献

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

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

本项目采用了微软开源行为准则。如需更多信息,请参阅行为准则FAQ,或通过[email protected]联系,有任何疑问或意见请提出。