ios - iOS 是否查找特定于区域的 .lproj 目录(例如 en_US.lproj)?

标签 ios cocoa-touch localization localizable.strings

根据官方文档Internationalization Programming Topics :

if your Mac app had localizations for United States, Great Britain, and Australian users, the bundle routines would search the appropriate region directory (en_US.lproj, en_GB.lproj, or en_AU.lproj) first, followed by the en.lproj directory. The same application on the iPhone would look only in the en.lproj directory.

但是我尝试将 Localized.strings 放在 en_US.lproj 目录中,而不是 en.lproj,我仍然可以使用 NSLocalizedString() 找到英文字符串功能。

有什么问题吗?

最佳答案

我不确定,但这是我有根据的猜测。

首先要认识到的是,OS X 和 iOS 共享大量代码。实际上,您可以找到很多官方仅 OS X 才有的功能,实际上也适用于 iOS。

这是我在手机上观察到的情况:

如果我有

- en_US.lproj
    - Localizable.strings

然后,它会从该文件中读取值,这与您找到的文档的内容相矛盾(正如您所指出的)。

但是,如果我有:

- en_US.lproj
    - Localizable.strings
- en.lproj
    - Localizable.strings

然后,它将从 en.lproj 获取值,有点尊重文档的精神。

现在,当我以图形方式使用 Xcode 时,它​​只会让我选择 en-US 的本地化,这与 en_US 相同(美国地区)。因此,我猜测您(像我一样)在 Xcode 之外手动添加了 en_US.lproj 目录,然后将其添加到您的 Xcode 项目中。

也许 Apple 的想法是,虽然 iOS 仍然可以识别 en_US.lproj,但由于他们已将 Xcode 配置为不允许您直接创建该本地化,因此应用程序不会在那里结束?所以,您已经(某种程度上)侵入了该功能。

还有一点要注意:如果您像我一样手动创建了 .lproj 文件夹,那么您必须小心,当您在 Xcode 之外更改它们时,它们实际上已经消失了,而您认为它们已经消失了。此外,您可能必须卸载应用程序才能清除您以这种方式添加(和删除)的旧 .lproj 目录。所以,这是观察奇怪行为的另一种方式。

长话短说,根据现有文档,我不会向 App Store 提交具有此类本地化的应用程序。将来它可能会被拒绝或中断(找不到字符串值),因为它在 iOS 上不受正式支持。也就是说,如果此功能继续无限期地工作,我也不会感到惊讶。

关于ios - iOS 是否查找特定于区域的 .lproj 目录(例如 en_US.lproj)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848566/

相关文章:

ios - 我可以像视频一样裁剪 GIF 吗?

ios - dequeueReusableCellWithIdentifier 为不同的 indexPath 返回相同的单元格

iphone - 使用核心数据撤消管理

python - Django Rest 框架本地化

ios - 在所有 View 上添加导航栏。 swift

ios - 如何使用 faSTLane 构建 react native iOS 应用程序

c# - 我可以更改 Windows Azure 网站上的区域设置吗?

ios - Xcode 项目本地化为葡萄牙语(巴西),为什么仍然显示英语?

objective-c - 捕获组在 NSRegularExpression 中不起作用

cocoa-touch - Cocoa Touch - 使用叠加 View 添加纹理