当使用当前语言缺少密钥时,我无法使用NSLocalizedString(key, comment: "")
从Localizable.strings加载字符串。 NSLocalizedString返回原始密钥
例如,当英语本地化存在字符串时,俄语缺少字符串:
"config.updating" = "Update in progress...";
当iOS语言设置为俄语时返回" config.updating"
时调用NSLocalizedStringNSLocalizedString("config.updating", comment: "") // "config.updating"
不应该NSLocalizedString访问" AppleLanguages"键入NSUserDefaults以确定用户的设置是什么并选择其他字符串?
答案 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'