【发布时间】:2017-01-04 12:51:04
【问题描述】:
我有一个设计有英文用户界面的应用程序,另外还有德文 UI 翻译。运行时,会选择正确的用户界面语言。使用 Base Internationalization,Xcode 8.2.1,Swift 3。
然后我将应用程序克隆到一个新的应用程序中,主要是剥离部分并重命名应用程序。这是一个相当大的 PITA(抱歉),主要问题是 CocoaPods 不再被识别(import 上的错误)等。经过一番摆弄后它再次工作,但 UI 总是在德语(!) ,无论 iOS 设置如何。即使 iPhone 语言是英语,没有其他首选语言,并且地区是美国,应用程序 UI 也会以德语显示。
奇怪的是,应用中使用的字符串(通过NSLocalizedString())以英文正确选择。
Bundle.main.preferredLocalizations.first 也返回 en。
附录:
该应用程序显示的系统对话框是英文的。Info.plist 中的键 CFBundleDevelopmentRegion 设置为 en。Base.lproj/Main.storyboard中的UI文本是英文的。
在模拟器和真实设备上的行为相同。
我怀疑英语(基本)用户界面在此过程中变得不可用。但是,在 Interface Builder 中,英文版本显示为“Main Storyboard > Main Storyboard (Base)”,并带有一个包含翻译的兄弟文件“Main.strings (German)”。
附录 2:在项目 → 信息 → 本地化中,我可以看到“英语 - 开发语言:2 个本地化文件”但“德语:5 个本地化文件”。也许这就是为什么某些资源在运行时无法以英语提供的原因。但我无法确定这些条目是指哪些文件。
如果我“为本地化而导出”,我会得到一个带有这 5 个(!)标题的 xliff 文件(XY 是项目名称):
<file original="XY/Base.lproj/LaunchScreen.storyboard" source-language="en" datatype="plaintext" target-language="de">
<file original="XY/Base.lproj/Main.storyboard" source-language="en" datatype="plaintext" target-language="de">
<file original="XY/Info.plist" source-language="en" datatype="plaintext" target-language="de">
<file original="XY/Localizable.strings" source-language="en" datatype="plaintext" target-language="de">
<file original="XY/Main.strings" source-language="en" datatype="plaintext" target-language="de">
有什么提示吗?
【问题讨论】:
-
我也遇到了同样的问题,你找到解决办法了吗?
-
@Franck:不幸的是,没有。但幸运的是,我能够跳过整个项目。也许我会用新的 Xcode 9 再试一次。
标签: ios internationalization xcode8