Yannis P.
Yannis P.

Reputation: 833

Exporting xliff file on Xcode acting strangely

So I have a project that has been already localized in the past. But we created some new keys and we want to get them translated seperately.

Also in some languages some keys are missing, so I wanted to find those too. So what I did was to export the xliff files for translation using Xcode's export tool. I've using NSLocalizedString everywhere in my project, so theoretically that should have me covered.

But when I open an exported xliff file (let's say for Italian) I have the following problems:

The section in the xliff file for the localizable file is listed twice. The first time it's like this:

Translations for projectName/Localizable.strings

In this part of the xliff file ALL the translations are missing, even though the localizable file contains translated values for most of the keys.

Then the same localizable file is listed twice as:

Translations for projectName/en.lproj/Localizable.strings

In this case the keys all have their translated values, but if a key is missing from the English localizable file then it's also missing from here.

This is making it a huge pain for me because I'm just looking for the keys that are missing translations, and yet this way it means I have to go through the English list again to make sure no keys are missing.

This doesn't seem normal or practical to me. Anyone have any idea what I might be doing wrong?

The translated keys all work fine on the app itself by the way, tried it both on devices and the simulator.

Thank you for your help.

Upvotes: 2

Views: 813

Answers (1)

Liquidsoul
Liquidsoul

Reputation: 56

I do not use xliff exported files to manage my translations so I cannot give you an answer using this.

However, you may be able to solve your problem of finding missing localizations using Localization.strings files.

What you can do is use the genstrings command to generate a Localizable.strings file which will contain all the NSLocalizedString from your code. To do this, you must pass all for your source files to genstrings. For example, if you have a swift only project, you can just run this command at the root of your project:

find . -name "*.swift" | xargs genstrings

This will generate a Localizable.strings file you can then compare to your existing Localizable.strings file with a file compare tool like FileMerge. To make this effective, you may need to sort the keys in all the Localizable.strings files, I know a lot of editors can do this (SublimeText is one).

As you can see, the above solution is manual and will prove error prone if you need to do this more than once. In the past, I've automated this using a python script which did the following given the generated Localizable.strings and a localized strings file:

  1. parse the Localizable.strings to get all the reference keys
  2. parse a given localized strings file to get the localized keys
  3. output the unused keys and the ones not translated

Hope this helps!

Upvotes: 2

Related Questions