iOS 本地化更改,本地区域

Posted

技术标签:

【中文标题】iOS 本地化更改,本地区域【英文标题】:iOS Localizations changing, native region 【发布时间】:2016-05-17 09:36:16 【问题描述】:

我开发了一个应用程序,其中包含一些输入 plist 文件,以及该应用程序的输入数据。 这个输入数据现在是俄语。

在开发过程中,我打算仅在俄语 AppStore 为讲俄语的客户分发此应用程序。现在我的应用程序在 AppStore 中。但现在我也想为说英语的客户分发我的应用程序。 我知道我必须用英语输入数据准备翻译的输入列表。

我的问题涉及应用程序中的更多本地化..

在开发过程中我更改了 info.plist 文件,我将“本地化原生开发区域”设置为“ru”。

解决我的案件最正确的方法是什么? 我应该将“本地化本地开发区域”设置为“ru”并添加英语本地化吗? 或者我应该将“本地化本地开发区域”设置回“en”并添加俄语本地化? 或者也许我应该添加两个本地化 - 英语和俄语?在这种情况下,我应该将哪个选项设置为“本地化原生开发区域”?

顺便说一句,我如何根据当前本地化以编程方式选择读取哪个输入数据 plist 文件?

【问题讨论】:

【参考方案1】:

我认为您应该将 Localization native development region 更改为 en region,从 documentation:

CFBundleDevelopmentRegion (String - ios, OS X) 指定默认值 包的语言和区域,作为语言 ID。例如, 英国英语的语言 ID 为 en-UK。系统 如果无法找到用户的资源,则使用此值 首选语言

世界上讲英语的人数比讲俄语的人数还要多。如果定位系统找不到所需的本地化,它将使用您的母语文件。 但是如果你使用 NSBundle 的method 来加载原生资源(例如 plist):

- (NSURL *)URLForResource:(NSString *)name
            withExtension:(NSString *)extension
             subdirectory:(NSString *)subpath
             localization:(NSString *)localizationName
//The file URL for the resource file or nil if the file could not be located.

您应该添加非本地化的 plist 文件,以避免从该方法返回 nil URL 以获得不受支持的本地化(具有相同名称但不在 lang 目录中的文件)。

Here 你可以阅读 NSBundle 如何在你请求资源时找到资源。

【讨论】:

谢谢你!对于localizationName - 如何正确调用英语或俄语本地化? 关于我最初的问题的详细信息:我使用这个: NSString *path = [[NSBundle mainBundle] pathForResource:pathName ofType:@"plist"];获取输入 plist 文件的路径。然后我将文件的内容解析为 nsdictionary 和某个对象。因此,如果用户选择了英文本地化,我想获取此文件的英文版本的路径,如果选择了俄文本地化,我想获取俄文版本。我该怎么做? 在您的应用程序中设置位置,或者您使用本地化系统的默认实现。如果使用默认实现,您应该只添加 en 和 ru 语言目录,并将本机语言更改为 en 并且所有应该从框中工作。如果您想使用内部语言子系统(在应用程序中更改语言),您应该使用本地化方法加载 plist(我之前已经展示过)并添加非本地化 plist 文件。

以上是关于iOS 本地化更改,本地区域的主要内容,如果未能解决你的问题,请参考以下文章

iOS 是不是依赖另一个区域本地化字符串?

本地通知在 iOS 10.3.1 中不起作用

找出 iOS 中的实际本地化(相对于当前区域)?

应用未在 iO 中运行时的本地区域识别

更改 iOS 应用本地化运行时间

用户进入特定区域时如何获取本地通知提供的 ios