问题
I'm having trouble using NSLocalizedString(key, comment: "")
to load strings from Localizable.strings when the key is missing for the current language. NSLocalizedString returns a raw key
For instance, when string is present for English localization, but is missing for Russian:
"config.updating" = "Update in progress...";
Calling NSLocalizedString when iOS language set to Russian returns "config.updating"
NSLocalizedString("config.updating", comment: "") // "config.updating"
Shouldn't NSLocalizedString access the "AppleLanguages" key in NSUserDefaults to determine what the user's settings are and pick some other string?
回答1:
No, the documentation for NSLocalizedString(key,comment)
is pretty clear -
The initial value for
key
in the strings file will bekey
. Use theNSLocalizedStringWithDefaultValue
macro to specify another value for key.
What else would you expect it to return? The code simply looks up the key in a dictionary. It has no idea what message is associated with the key, let alone how to translate that message into Russian.
回答2:
You can probably create a Build Phase run script
where you compare the keys of your translation between your base (say its English
) with Russian
and then if there is any difference you can either stop the build (exit 1
after echo "error:..."
) and show a build error with the missing keys as output or you can just show them as error and not stop the build.
1) In your Build Phase Run Script:
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
2) I have created in my project root folder
a folder path like this tools/localization/
where I have put a bash script check_missing_keys_in_translations.sh:
#!/bin/sh
plutil -convert json 'ProjectRootFolder/Resources/Localization/'"$1"'.lproj/Localizable.strings' -o - | ruby -r json -e 'puts JSON.parse(STDIN.read).keys.sort'
3) Don't forget to make your script executable:
chmod a+x check_missing_keys_in_translations.sh
来源:https://stackoverflow.com/questions/27144984/nslocalizedstring-shows-raw-key-instead-of-loading-a-string-from-another-languag