Xcode本地化 - 如何为开发语言创建本地化字符串

3
使用Xcode 7的本地化导出工作流程,我可以导出到Xliff,并提供给翻译人员,他们将提供翻译版本,我们再次导入。

但是,如何为原始开发语言生成一个呢?

我想这样做是因为我不想通过手动维护我的开发语言字符串文件。

以下是情况:

  1. 我从项目中没有任何字符串文件开始,只有使用NSLocalizedString的Swift代码

static let something = NSLocalizedString("something.hello", tableName: "MyStuff", value: "Hello world!", comment: "some comment")

  1. 从项目设置中,我选择 编辑器 -> 导出本地化。因为我没有现有的字符串文件,在导出时没有选项。只有一个“另存为”提示。

  2. 这将从原始源代码执行Xliff导出。(当其他本地化已经存在时,选择“包括:仅开发语言”时与选择相同)。 Xliff看起来像这样,只有<source>标记,而没有<target>标记。

<trans-unit id="something.hello"> <source>"Hello world!</source> <note>some comment</note> </trans-unit>

  1. 翻译人员修改了Xliff文件,并将其翻译成简体中文

  2. 通过Xcode重新导入已翻译的Xliff文件到项目中

  3. 这将为简体中文创建MyStuff.strings文件

  4. 问题是 - 当我运行应用程序时,应用程序将使用中文字符串文件,即使语言是英语,因为不存在英语文件。它似乎不再使用默认值value。这意味着我也需要一个英语字符串文件。

如何通过导入/导出过程生成英语(开发语言)版本的字符串文件? Xcode不让我在原始开发语言中“导出”。因此,我无法重新导入它以创建字符串文件。

关于genstrings的说明

“将用户界面文本与代码分离”的文档中,它说:“或者,您可以直接从NSLocalizedString宏生成开发语言字符串文件,如“为代码中的用户界面文本创建字符串文件”中所述。”,这告诉您要使用genstrings
然而,当您指定tableName时,genstrings不再适用于Swift。据我所见,SO上已经提交了多个radar,但似乎苹果已不再支持它。
1个回答

2
我已经解决了这个问题。 在开发语言中生成字符串文件似乎不是必要的。这可能是为什么Xcode没有这个功能的原因。
我的问题是应用程序认为我选择的开发语言(英语)不受支持,因此进行了进一步的回退,并最终选择了一个我的应用程序本地化的语言(在这种情况下是中文)。
通过添加一个针对英语的本地化文件,并确保包中存在一个en.lproj文件夹,它可以推断出我的应用程序是本地化为英语的,并将正确使用NSLocalizedString调用中指定的默认值。 这意味着我不需要单独的英语字符串文件副本。这很好,因为我不需要在应用程序更改时保持其更新。真正的数据源只有Swift源代码。
这个链接很有帮助: iOS如何确定应用程序的语言

当这篇答案写出来的时候,我的经历也是如此,但是现在,在 Xcode 9.3 中,它将不再导入缺失于基础文件中的字符串。 - Nestor
在我们的项目中,我们希望开发语言由产品管理,这样他们就可以更新英文值而不需要开发人员进行源代码更改。强制进行源代码更改似乎是一个很大的限制,因为我们应该能够像其他语言一样导入值的更新。有没有人找到了解决这个问题的方法? - vastopa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接