iPhone中设置的其他语言无法读取Localizable.strings(基本)文件字符串吗?

时间:2018-09-11 05:57:22

标签: ios swift localizable.strings

我已经在我的应用中实现了多语言,并创建了多个Localizable.strings文件。

enter image description here

我在Localizable.strings (Base)文件中拥有所有字符串键和值,因为如果特定语言字符串文件中缺少垂直字符串(例如, Localizable.strings (Japanese)文件中缺少Japanese和一些字符串,因此我希望从Base获得字符串翻译。

但这没有发生,这就是我的问题。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并采用了此解决方案:

  1. 为英语(DefaultEnglish.strings)创建新的默认String本地化文件 例如:"hello_key" = "Hello"
  2. Localizable.strings文件添加其他语言支持 例如:日文字符串:"hello_key" = "こんにちは"

enter image description here

  1. 创建字符串extension

    extension String {
    
    func localizedStringKey(bundle _: Bundle = .main, tableName: String = "Localizable") -> String {
        return NSLocalizedString(self, tableName: tableName, value: "\(NSLocalizedString(self, tableName: "DefaultEnglish", bundle: .main, value: self, comment: ""))", comment: "")
    }     }
    
  2. 并设置字符串"hello_key".localizedStringKey()

答案 1 :(得分:1)

本地化应用程序时,无需使用Base Localizable.strings文件。

按以下方式本地化字符串...

NSLocalizedString("DISMISS_BUTTON", value: "Press To Dismiss", comment: "Button used to dismiss the payment screen")

然后,key(第一个参数)用于在Localizable.strings中查找给定的语言。如果找不到,它将使用字符串中的value参数作为后备。

如果您使用Xcode的本地化导出…,则xliff文件将包含您所有NSLocalizedString的密钥

您唯一需要使用Base Localizable.strings的原因是对于在源代码中不会显示为字符串的键,例如

let localisableName = "LAYOUT_NAME_" + name.uppercased()
NSLocalizedString(localisableName)

在这种情况下,您应该添加

"LAYOUT_NAME_WHATEVER" = "Whatever";

到您的base文件中,该文件也将包含在生成的xliff中

答案 2 :(得分:1)

否,没有可用文件的特定本地化版本时,将使用基本本地化文件。 例如。如果您的应用具有英语的基本本地化语言,并且您添加了法语的本地化语言,则法语以外的语言将获得英语值。

NSLocalizedString(key,comment)的{​​{3}}很清楚-

  

字符串文件中key的初始值为key。使用   NSLocalizedStringWithDefaultValue宏可为其指定另一个值   键。

您还希望它返回什么?该代码只是在字典中查找键。它不知道该密钥与什么消息相关联,更不用说如何将该消息翻译成俄语了。

相关问题