故事板中的本地化和面向用户的文本

时间:2016-02-14 09:40:59

标签: ios iphone xcode swift localization

我正在学习关于Swift(https://www.appcoda.com/swift/)的iOS 9 AppCoda书籍,我特别关注本地化部分。因此,作者已经完成了将代码中的一些面向用户的字符串从String更改为NSLocalizedString。这是有道理的,我在那里所做的更改会自动使用XLIFF文件进行更新。在关于本地化的部分中,作者提到您还可以使用Xcode的Export Localization功能翻译Storyboard面向用户的字符串。

因为这是你完成的一本书,他提供了一个已经翻译成中文和德文的XLIFF文件,其中包括源代码翻译文本和翻译的Storyboard元素。

当我将文件导入Xcode时,我看到三个故事板(Base和Chinese / German.strings等),但是当我运行应用程序时,没有任何Storyboard元素实际翻译,只有源代码中的元素。

当我点击德语故事板时,我得到“没有本地化字符串”。

enter image description here

他的示例中的应用程序工作,故事板中的UI元素已翻译,但它们不在我的情况下。到目前为止,整个应用程序都遵循了练习,因此没有任何差异。或者即使有,也应该翻译相似之处,但在Storyboard元素中,它们不是。

在我的案例中,有没有人对为什么故事板元素不会使用翻译文本进行更新有任何想法?

任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:2)

我的猜测是......从Storyboard导出本地化字符串与从代码中导出这些字符串略有不同。

来自代码的字符串的本地化文件从NSLocalizedString宏获取实际文本并创建映射,例如:

"Original string" = "Translated string".

因此,您只需在代码中使用“原始字符串”,然后Xcode知道它应该将其翻译为“Translated string”。

但是,故事板本地化文件使用UI对象句柄来设置本地化字符串。例如:

/* Class = "UILabel"; text = "Ops..."; ObjectID = "fe4-zT-gjU"; */
"fe4-zT-gjU.text" = "Wait for it...";

在这个示例中,我的故事板有一个UILabel,文本为“Ops ...”,该标签的ObjectID等于“fe4-zT-gjU”。

对象ID对于每个项目中的每个对象都是唯一的,因此显然,app coda教程中的对象ID对于作者创建的项目是唯一的;除非您下载了作者的原始故事板,否则您的故事板将具有所有不同的对象ID,因此Xcode将不知道如何将正确的翻译与正确的对象相关联。

我认为Xcode不会导入具有无法识别的objectID的对象的本地化。

所以我认为你应该做的是执行“导出本地化”操作。这应该更新您的storyboard .strings文件。然后使用xliff编辑器将教程文件中的每个翻译复制到.strings文件中。我知道,无聊。欢迎来到app开发世界。 : - )

答案 1 :(得分:0)

当您添加本地化时,您是否选择了故事板文件?

enter image description here

如果是,请检查您的方案是否设置为正确的语言。这可以在Product>下完成。方案>编辑方案

enter image description here

如果没有,请检查您的模拟器是否设置为您要显示的语言。这可以在模拟器的设置中完成,与iPhone相同。

希望这有帮助。