【问题标题】:Localizable.strings (Base) file strings not read by other language set in iPhone?Localizable.strings(Base)文件字符串不被iPhone中设置的其他语言读取?
【发布时间】:2018-09-11 05:57:21
【问题描述】:

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

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

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

【问题讨论】:

  • 基本字符串文件中是否有超过 1 个语言字符串或只有日语字符串?
  • 基本字符串包含所有英文字符串翻译,如果调试器没有找到日语字符串,那么它应该默认从基本文件中选择。
  • 是的,它必须像这样发生。你现在看到的是什么字符串?
  • @AnkitJayaswal 当我的 iPhone 语言为日语时,我只能看到我试图访问的密钥。

标签: ios swift localizable.strings


【解决方案1】:

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

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

【讨论】:

  • 顺便说一句,最好检查 NSLocalizedString 返回的值,如果我们没有这样的键 - 我们应该采取一些措施,例如 - 写一条日志消息。
【解决方案2】:

本地化应用时,无需使用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 文件将包含来自您所有 NSLocalizedStrings 的密钥

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

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

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

"LAYOUT_NAME_WHATEVER" = "Whatever";

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 2011-02-22
      • 2011-03-10
      • 2011-12-08
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2013-09-11
      相关资源
      最近更新 更多