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

Localizable.strings (Base) file strings not read by other language set in iPhone?

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

我在 Localizable.strings (Base) 文件中有所有字符串键和值,作为它的默认文件,如果特定语言字符串文件中缺少特定字符串,则从所有其他语言读取,例如Localizable.strings (Japanese) 并且 Japanese 文件中缺少一些字符串,所以我希望从 Base.

获得字符串翻译

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

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

将您的字符串本地化如下…

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

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

如果您使用 Xcode 的 Export For Localization…,xliff 文件将包含您所有 NSLocalizedString 的密钥

您唯一需要 Base Localizable.strings 的情况是用于在您的源代码中未显示为字符串的键,例如

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

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

"LAYOUT_NAME_WHATEVER" = "Whatever";

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

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

NSLocalizedString(key,comment)documentation 非常清楚 -

The initial value for key in the strings file will be key. Use the NSLocalizedStringWithDefaultValue macro to specify another value for key.

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

我遇到了同样的问题并应用了这个解决方案:

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

  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()