导出本地化应用程序,不包括在Xcode 6 Xliff中使用NSLocalizedString创建的字符串

时间:2014-08-15 19:13:29

标签: xcode localization internationalization

我正在尝试本地化我的应用,我有以下代码:

self.arrayLabels = [NSArray arrayWithObjects:NSLocalizedString(@"This is a test", "this is a test"),  NSLocalizedString(@"I want my strings to get added to localizable strings file", "strings comment") , nil];

所以,基本上,根据我的理解,这应该是它,我点击Editor > Export for Localization,字符串应该在我的XLiff文件中。但是,他们不是。

我有两种语言,英语和葡萄牙语,两个localizable.strings文件都是空的。

我错过了什么吗?

3 个答案:

答案 0 :(得分:5)

我发现我有一些错误,这就是我无法从菜单中导出的原因。

我怀疑没有返回错误消息。

事实证明,该菜单正在调用现有的命令行工具,因此通过消除过程,您可以修复导出。

以下是我为解决问题所采取的措施。希望他们会帮助你。

运行等效命令行

xcodebuild -exportLocalizations

如果您有错误,xcodebuild可能会提供文件名和行号,以便您能够解决问题。

我有一个没有任何细节的错误。

然后我转而使用genstrings,因为xcodebuild似乎在循环中使用。

find . -name '*.m' | xargs genstrings -o somePath/en.lproj

这给出了同样的错误

要获取有问题的文件,我在循环中单独运行每个文件。

for f in `find . -name '*.m'`; do 
    echo "processing $f ...";
    genstrings -o somePath/en.lproj $f
done

这给了我一个有问题的文件的名称。

事实证明,genstrings不喜欢我试图使用unicode字符\ U000000B2打印的特殊字符。

答案 1 :(得分:1)

要导出的XLIFF包含本地化字符串,必须满足以下几个条件:

  1. 密钥必须出现在本地化的字符串文件中。在您的情况下,这些文件是空的。这将解释这个问题。
  2. 您必须将密钥用作NSLocalizedString宏的字符串文字。例如:
  3. 这是正确的方法:

    NSLocalizedString("some_key", "")
    

    这不起作用:

    let key = "some_key"
    
    NSLocalizedString(key, "")
    

答案 2 :(得分:0)

在Xcode中,使用编辑器 - >"提取本地化"菜单将生成.xliff文件(每种语言选择一个)。 .xliff文件将发送到翻译服务进行翻译。翻译服务更新.xliff文件后,您需要使用编辑器 - >"导入本地化"将其导回到应用程序中。完成此步骤后,对于每种语言,您将找到包含翻译结果的xx.lproj /文件夹。