NSLocalizedString显示原始密钥而不是从另一种语言加载字符串

时间:2014-11-26 09:03:41

标签: ios swift localization localizable.strings

当使用当前语言缺少密钥时,我无法使用NSLocalizedString(key, comment: "")从Localizable.strings加载字符串。 NSLocalizedString返回原始密钥

例如,当英语本地化存在字符串时,俄语缺少字符串:

"config.updating" = "Update in progress...";

当iOS语言设置为俄语时返回" config.updating"

时调用NSLocalizedString
NSLocalizedString("config.updating", comment: "") // "config.updating"

不应该NSLocalizedString访问" AppleLanguages"键入NSUserDefaults以确定用户的设置是什么并选择其他字符串?

2 个答案:

答案 0 :(得分:1)

不,NSLocalizedString(key,comment)的{​​{3}}非常明确 -

  

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

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

答案 1 :(得分:0)

您可能可以创建一个Build Phase run script,在其中比较您的基础(例如,English)和Russian之间的翻译键,如果有任何区别,则可以停止构建({{1}之后的exit 1),并以丢失的键作为输出显示构建错误,或者您可以将它们显示为错误而不停止构建。

1)在构建阶段运行脚本中:

echo "error:..."

2)我在MISSING_KEYS_TRANSLATIONS=$(diff <($SRCROOT/tools/localization/check_missing_keys_in_translations.sh en) <($SRCROOT/tools/localization/check_missing_keys_in_translations.sh ru)) if [ "$MISSING_KEYS_TRANSLATIONS" ]; then echo "error: $MISSING_KEYS_TRANSLATIONS" fi 中创建了一个像这样的文件夹路径project root folder,在其中放置了一个bash脚本 check_missing_keys_in_translations.sh:

tools/localization/

3)不要忘记使脚本可执行:

#!/bin/sh plutil -convert json 'ProjectRootFolder/Resources/Localization/'"$1"'.lproj/Localizable.strings' -o - | ruby -r json -e 'puts JSON.parse(STDIN.read).keys.sort'