iOS:如何检索特定语言环境的语言环境字符串而不是用户在操作系统中设置的字符串?

Posted

技术标签:

【中文标题】iOS:如何检索特定语言环境的语言环境字符串而不是用户在操作系统中设置的字符串?【英文标题】:iOS: How to retrieve locale strings for a specific locale than what the user has set in OS? 【发布时间】:2014-04-01 21:11:07 【问题描述】:

是否可以通过编程方式检索特定语言环境的字符串,而不管手机设置为什么语言环境?例如,用户可能正在用英语运行手机,但我想在不更改操作系统区域设置的情况下检索法语字符串。

注意:这不是上述问题的重复。我不想覆盖我的应用程序中的当前设置,我只想能够以编程方式检索我希望的任何语言环境的语言值。我的应用内容可能正在显示英文文本,但我希望我的应用的特定组件显示不同的语言。

【问题讨论】:

从什么中检索字符串?在哪里? 查看一个名为 隐藏的 ios 7 开发宝藏 developer.apple.com/tech-talks/videos 的演讲的最后部分讨论了您的需求。 How to force NSLocalizedString to use a specific language的可能重复 不是重复的。我不想设置 AppleLanguages。该应用仍然可以使用英语,但我想以编程方式检索不同的语言。 @Boon 不需要,因为它只是重复的问题回复。 【参考方案1】:

我通过使用这种方法扩展 String 解决了这个问题。您可以通过这种方式获取应用中任何语言环境的本地化字符串。

extension String 
    func localized(forLanguageCode lanCode: String) -> String 
        guard
            let bundlePath = Bundle.main.path(forResource: lanCode, ofType: "lproj"),
            let bundle = Bundle(path: bundlePath)
        else  return "" 
        
        return NSLocalizedString(
            self,
            bundle: bundle,
            value: " ",
            comment: ""
        )
    

示例(系统语言为英语时获取乌克兰语的本地化字符串):

"settings_choose_language".localized(forLanguageCode: "uk")

【讨论】:

以上是关于iOS:如何检索特定语言环境的语言环境字符串而不是用户在操作系统中设置的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:有没有办法伪造用户的语言环境?

如何更改格式化日期的语言环境?

无论语言环境如何,我如何强制使用点而不是逗号的 Swift Decimal Pad?

JSF 中的本地化,如何记住每个会话而不是每个请求/视图选择的语言环境

爱沙尼亚语(et-EE)语言环境中的小数分隔符在 Windows 服务器中以点而不是逗号的形式出现

某些特定 Windows 语言环境的奇怪行为:为啥以及如何应对?