I\'m having trouble using NSLocalizedString(key, comment: \"\") to load strings from Localizable.strings when the key is missing for the current language. NSLoc
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
No, the documentation for NSLocalizedString(key,comment) is pretty clear -
The initial value for
keyin the strings file will bekey. Use theNSLocalizedStringWithDefaultValuemacro 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.