iOS本地化问题 1功能实现的改变 2在启动选项中将土耳其语作为应用程序语言传递,以查看模拟器上的本地化操作

问题描述

大家好,我想以本机解决方案的方式向我的应用添加多语言。我的问题是我做了所有事情,但仍然无法从文件中读取本地化的字符串。

Firstly I add to my project Localize.string file.

首先,我将Project Localize.string文件添加到我的项目中。

Secondly I add second language to Project/Base Code/

其次,我在项目/基本代码/中添加了第二种语言

There is also my Localized.String file

还有我的Localized.String文件

有我的扩展名

extension String {

func localized() -> String {
    
    if let _ = UserDefaults.standard.string(forKey: "lang") {} else {
        UserDefaults.standard.setValue("en",forKey: "lang")
        UserDefaults.standard.synchronize()
    }
    
    let lang = UserDefaults.standard.string(forKey: "lang")
    let path = Bundle.main.path(forResource: lang,ofType: "lproj")
    let bundle = Bundle(path: path!)
    
    return NSLocalizedString(self,tableName: nil,bundle: bundle!,value: "",comment: "")
}}

我尝试使用label.text =“ language” .localized()

但是我的标签输出是“语言”。我也清理了派生数据。但我找不到解决方法

解决方法

1。功能实现的改变

func localized() -> String的最简单实现就像

func localized() -> String {
    return Bundle.main.localizedString(forKey: self,value: nil,table: "Localize") <-- the .strings file name from which you expect your localized value
}

如果计划有多个.strings资源文件,则可能需要将文件名作为参数传递给该函数。

如果要使用名称为Localizable.strings的单个资源文件,请改用以下定义。

func localized() -> String {
    return NSLocalizedString(self,comment: "") <-- Picks up localized version from `Localizable.strings`
}

由于这是文件I / O操作,因此在获取本地化值时,可以避免每次访问UserDefaults并将其保存为调用synchronize()。我也不明白它的用处。

2。在启动选项中将土耳其语作为应用程序语言传递,以查看模拟器上的本地化操作。

在Silutor上运行时,您可能需要从启动选项中将土耳其语作为应用程序语言传递。选择您的Scheme-> Edit Scheme enter image description here