How can I automatically check for missing localiza

2020-06-23 04:57发布

问题:

SourceFile.m

NSLocalizedString(@"Word 1", @"");
NSLocalizedString(@"Word 2", @"");

de.lproj/Localizable.strings

"Word 1" = "Wort 1";
"Word 2" = "Wort 2";

fr.lproj/Localizable.strings

/* Missing Word 1 */
"Word 2" = "Mot 2";

Is there a script or a compiler setting that will check that all localised strings are translated in all supported locales?

回答1:

You can use diff on the list of keys to see what's missing

Here's a shell script (let's call it keys.sh) to print out the keys of a given .strings file, sorted to stdout:

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

You can then use it combined with the <(cmd) shell syntax to compare keys between two localisations; for example to compare your Base.lproj and fr.lproj:

diff <(keys.sh Base) <(keys.sh fr)


回答2:

Not the perfect solution for your problem. But you could uses following plugin to check localization strings while coding. https://github.com/questbeat/Lin

Also, I use to export localization string table from an Excel file or Google Sheet as a practice. This will make things easier and reduce lot of mistakes.



回答3:

Check my example on how you can achieve it

To sum up: you can create a Run Script under Build Phase in which you execute a bash script like suggested from @AliSoftware to compare your Localizable.strings and in case some keys are missing from one compared to the other you could either stop the build and output those missing keys as error or you could just output them as error and not let the build continue.



回答4:

Go under "Edit Scheme > Options" and check the "Show non-localized strings" box.

When you Build and Run you'll able to see warnings on Xcode command screen.

if you localized string like below:

lblTitle.text = NSLocalizedString("Lorem Ipsum", "")

then Xcode should throw an error message on terminal like below:

ERROR Lorem Ipsum not found in table Localizable of bundle CFBundle ...

For storyboards, Xcode will throw a similar error.



标签: ios xcode