首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS获得特定语言字符串的本地化版本。

iOS获得特定语言字符串的本地化版本。
EN

Stack Overflow用户
提问于 2015-02-20 17:07:38
回答 2查看 6.7K关注 0票数 13

我正在为iOS构建一个应用程序,它将以英语和法语两种语言提供。我读过一些关于国际化的教程,我了解它是如何工作的,以及我需要做什么。

我遇到的问题是,有一种特殊情况,我想为一个英语用户加载法语字符串。

我理解为整个应用程序设置语言是可能的,但它需要在应用程序生效之前重新启动它。我想避免这种情况,而是能够根据需要选择加载法语或英语字符串。

是否可以通过编程方式从.strings文件中为特定语言加载字符串?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-26 11:39:55

是的,这是可能的,但要做到这一点并不容易。

我只是有一个例子,我应该发送一个与ViewController相同的名字(所有语言)给GAI ()。

先决条件:

1)我从这里开始使用NSBundle扩展,https://stackoverflow.com/a/20257557/3883492 --也许首先在那里查找是个好主意。(老实说,真是天才)

2)我用的是斯威夫特

下面是一个非常简单的代码示例来说明我的想法:

代码语言:javascript
复制
func getFrenchString(forKey key: String) -> String {
    if let currentLanguage = (NSUserDefaults.standardUserDefaults().arrayForKey(AppleLanguages)?.first as? String) {
        if currentLanguage == "fr" {
            return NSLocalizedString(key, comment: "")
        }
        else {
            //the application is not currently on `fr`
            //change application to `fr`
            NSBundle.setLanguage("fr")

            //get the localized string on `fr`
            let frString = NSLocalizedString(key, comment: "")

            //return the application to the old language
            NSBundle.setLanguage(currentLanguage)

            return frString
        }
    }

    return ""
}

此外,您应该在您的项目中有带有本地化字符串的"fr.lproj“文件夹。

票数 10
EN

Stack Overflow用户

发布于 2021-02-25 17:25:47

我用这个方法扩展字符串来解决这个问题。您可以通过这种方式为应用程序中的任何地区获取本地化字符串。

代码语言:javascript
复制
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: ""
        )
    }
}

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

代码语言:javascript
复制
"settings_choose_language".localized(forLanguageCode: "uk")
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28634428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档