首页 > 解决方案 > 无法使用本地化设置语言

问题描述

我正在制作一个测试应用程序来实现本地化。在测试应用程序中,这就是我想要实现的......

当用户启动应用程序时,屏幕将显示一个带有文本的标签...“这是一个测试项目”和下面名为“更改”的按钮。现在,当我单击“更改”按钮时,标签应显示为法语..“c'est un projet test”,该按钮将被称为“更改”。

我有一个名为的类L102Language,它将我的语言设置为当前语言。它是这样给出的..

import Foundation
import UIKit
// constants
let APPLE_LANGUAGE_KEY = "AppleLanguages"
/// L102Language
class L102Language {
    /// get current Apple language
    class func currentAppleLanguage() -> String{
        let userdef = UserDefaults.standard
        let langArray = userdef.object(forKey: APPLE_LANGUAGE_KEY) as! NSArray
        let current = langArray.firstObject as! String
        return current
    }
    /// set @lang to be the first in Applelanguages list
    class func setAppleLAnguageTo(lang: String) {
        let userdef = UserDefaults.standard
        userdef.set([lang,currentAppleLanguage()], forKey: APPLE_LANGUAGE_KEY)
        userdef.synchronize()
    }
}

在视图控制器中,这是我编写的代码..

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var txtLabel: UILabel!

    @IBOutlet weak var change: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

    @IBAction func changeLanguage(_ sender: Any) {


        if L102Language.currentAppleLanguage() == "en" {
         L102Language.setAppleLAnguageTo(lang: "fr")
        } else {
         L102Language.setAppleLAnguageTo(lang: "en")
        }        
    }    
}

但是当我点击“更改”按钮时,什么也没有发生。文本只有英文。

编辑1:我的Main.strings文件有这些......

/* Class = "UILabel"; text = "This is a test project"; ObjectID = "OQM-55-dEJ"; */
"OQM-55-dEJ.text" = "c'est un projet test";

/* Class = "UIButton"; normalTitle = "CHANGE"; ObjectID = "eMn-n8-na5"; */
"eMn-n8-na5.normalTitle" = "changement";

标签: iosswift

解决方案


要在项目中使用本地化,您可以使用以下方式!

  1. 将本地化添加到项目。项目 -> 本地化 -> 添加本地化语言,例如(英语/德语/印地语等)

  2. 添加字符串文件并从右侧面板应用本地化。

  3. 根据您的语言在 crated 文件(英语/德语/印地语等)中添加键和关联值

例如

"localizeText" = "English"; "localizeText" = "German";

  1. 将它应用到任何你想要的地方。例如

    class ViewController: UIViewController {
        @IBOutlet weak var name: UILabel!
    
           @IBAction func showGermanText(_ sender: Any) {
            let val = name.text!.localized("de")
            name.text = val
          }
    
          @IBAction func showEnglishText(_ sender: Any) {
            let val = name.text!.localized("en")
            name.text = val
          }
        }
    

`

extension String {
      func localized(_ lang:String) ->String {
        let path = Bundle.main.path(forResource: lang, ofType: "lproj")
        let bundle = Bundle(path: path!)
        return NSLocalizedString("localizeText", tableName: "local", bundle: bundle!, value: "", comment: "")
      }}

注意* 这local是您的本地化字符串文件名。


推荐阅读