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

Posted

技术标签:

【中文标题】找出 iOS 中的实际本地化(相对于当前区域)?【英文标题】:Find out actual localization (as opposed to current region) in iOS? 【发布时间】:2015-01-13 09:04:59 【问题描述】:

假设我的应用程序支持英语和西班牙语本地化,包括en.lproj/Localizable.stringses.lproj/Localizable.strings。还假设它在区域设置为德语的 iPhone 上运行。

在这种情况下,我想用英语(不是德语)显示日期,以免产生部分是英语(由于en.lproj/Localizable.strings)和部分是德语(由于所选区域)的用户界面,因此可能包括“混合”字符串,例如"Weekend edition, Samstag, 10.1."

那么,我如何以编程方式从 ios 应用程序中找出实际使用的本地化(例如,在 iPhone 的地区设置为德国但应用程序仅支持英语和西班牙语本地化的情况下是英语)?

【问题讨论】:

错了,一个不会说英语但懂一点德语的西班牙人可能会将本地化的首选顺序设置为 1. 西班牙语 2. 德语。由于您没有西班牙语本地化选项,因此在这种情况下,默认情况下将使用德语本地化,而不是英语。让用户决定他想看到什么。 @A-Live 我的目的是让用户决定她想看什么。假设他已将首选顺序指定为 1. 德语,2. 西班牙语。我的应用程序不支持德语本地化,因此西班牙语在这种情况下向用户提供最好的报价。我的问题是关于如何在应用程序中找到选择了西班牙语(不是德语),以便我可以相应地适应其他格式,例如日期。 区域格式有单独的设置,甚至可以选择将日期、时间和其他格式与所选的主要设备设置特别不同;作为用户,我希望看到这些设置按照提供的方式使用,即使它有时允许混合使用语言。您始终可以选择创建一个特殊的本地化值并检查结果,我可以预见的主要问题是它不会被微调并且需要太多的努力来支持。 @A-Live 所以现在我已经听说了什么是可取的,我仍然想知道在查询“实际”本地化(例如“es”,而不是“ de”在运行的例子中)。我不是说你错了,但我的问题集中在可行性(在这种情况下获得“es”)。 NSLocale -preferredLanguages 怎么样,它似乎正在做你想做的工作。 【参考方案1】:

我发现以下内容可以完成这项工作(基于this 相关问题中的线索):

NSArray *preferredLanguages = NSLocale.preferredLanguages;

NSString *actualLanguage = nil;
for (actualLanguage in preferredLanguages)
    if ([NSBundle.mainBundle pathForResource:actualLanguage ofType:@".lproj"] != nil)
        break;

if (actualLanguage == nil)
    actualLanguage = @"en"; // default

【讨论】:

以上是关于找出 iOS 中的实际本地化(相对于当前区域)?的主要内容,如果未能解决你的问题,请参考以下文章

iOS点击事件穿透及扩大视图点击区域

找出子视图相对于视图的位置

原生JS中获取位置的方案总结

原生JS中获取位置的方案总结

张量相对于元素邻居的条件值

java 绝对路径 / 相对路径总结