NSLocalizedString shows raw key instead of loading a string from another language

前端 未结 2 2029
温柔的废话
温柔的废话 2021-01-13 04:48

I\'m having trouble using NSLocalizedString(key, comment: \"\") to load strings from Localizable.strings when the key is missing for the current language. NSLoc

相关标签:
2条回答
  • 2021-01-13 05:29

    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

    0 讨论(0)
  • 2021-01-13 05:35

    No, the documentation for NSLocalizedString(key,comment) is pretty clear -

    The initial value for key in the strings file will be key. Use the NSLocalizedStringWithDefaultValue 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.

    0 讨论(0)
提交回复
热议问题