gpt4 book ai didi

ios - Storyboard中的本地化和面向用户的文本

转载 作者:行者123 更新时间:2023-11-28 12:54:29 24 4
gpt4 key购买 nike

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

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

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

当我点击德语 Storyboard 时,我得到“无本地化字符串”。

enter image description here

他的示例中的应用程序可以正常工作, Storyboard 中的 UI 元素已翻译,但在我的例子中不是这样。到目前为止,整个应用程序都遵循了练习,因此实际上没有任何区别。或者即使有,相似之处本身也应该翻译,但在 Storyboard 元素中,它们不是。

在我的案例中,有没有人知道为什么 Storyboard 元素不会用翻译后的文本更新?

如有任何想法,我们将不胜感激。

最佳答案

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

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

"Original string" = "Translated string".

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

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

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

在这个例子中,我的 Storyboard有一个 UILabel,带有文本“Ops...”,并且该标签的 ObjectID 等于“fe4-zT-gjU”。

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

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

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

关于ios - Storyboard中的本地化和面向用户的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35390346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com