我的项目声明了两种语言:英语作为开发,法语作为附加语言。它也Use Base Internationalization
滴答作响。
当我在 Xcode 9 中本地化字符串文件时,我通常会将内容移动到法语,然后在Localization
列表中勾选Base
。这提供了新字符串文件的两个副本,一个是Base.lproj
(包含英语文本(,另一个是fr.lproj
,因此英语将用于法语以外的语言。
10,Localization
没有列出Base
,因此除了在 Xcode 9 中进行本地化然后恢复到 Xcode 10 之外,我看不到使用Base.lproj
的方法已经创建了基本文件。
这是一个错误,还是这就是它的本意?
更新 209 月 18 日。
现在有XCode 10的正式发布,即使标志仍然存在Use Base Internationalization
问题仍然存在。 如果这不是一个错误,有人可以解释发生了什么吗?应该有一个Apple文档来讨论这个问题。
顺便说一句,storyboard
或nib
在本地化时仍会列出 Base。只有Strings
文件似乎有问题。
发生这种情况是因为iOS不仅查找当前的系统语言。 它在首选语言列表中查找第一个受支持的语言。
但是,当您在系统偏好设置中选择语言时,iOS 会自动将此语言添加到首选语言列表中(设置 - 通用 - 语言和地区 - "首选语言顺序"部分(。
因此,当您将语言更改为不支持的语言时,应用程序会在"首选语言顺序"列表中选择第二种语言。
因此,"Base.lproj"文件不起作用。
也许正是出于这个原因,苹果从Xcode 10中删除了"Base.lproj"。
尝试使用 Xcode 14.2 在 iOS 主屏幕上本地化我的 Flutter 应用程序的名称时,我自己也遇到了同样的问题。我需要将Bundle display name
本地化为Info.plist
多种语言,并将英语作为默认语言,以便在用户选择不受支持的语言时显示。
最初,语言本地化工作正常,除了我不能拥有InfoPlist.strings
的Base
版本,因为该选项未显示在 Xcode 中,而其他两个storyboard
文件确实有Base
版本。
我前往Main.storyboard
,注意到虽然Base
文件被称为Main.storyboard
,但本地化文件被称为Main.strings
。它给出了一个想法,即Base
文件以某种方式与本地化文件不同。所以我最终认为原始Info.plist
将作为Base
版本,因此是默认语言,在本例中为英语。