This converts most .strings and .stringsdict files into .xcstrings files using Xcode's migration tool. My primary motivation for this was to have a better translation workflow with Crowdin.
String Catalog files have advantages:
Xcode manages and updates them during the build process as keys are added, removed or changed
Xcode has a GUI viewer/editor for them, which also shows the translation status
They support plurals, which makes the separate .stringsdict files unnecessary (and are much nicer to work with)
They are multi-language, which makes .strings files per language unnecessary
They are backwards-compatible (Xcode generates .strings files for the app bundle)
Xcode 16 beta also adds support for marking strings as unlocalisable
The workflow with Crowdin is also simpler, because XLIFF can be avoided altogether. I will update the documentation once this is merged, but to summarise it here: the .stringsdict files are imported and export to and from Crowdin directly.
There were some challenges to overcome:
Crowdin for some reason insists on exporting Portugal Portuguese files with the language code "pt-PT" instead of "pt" which Xcode and XLIFF uses. I have decided to change the language code in the Xcode project instead.
Crowdin fills in missing plural variants with existing translations on export (e.g. if a translation has a plural variant for "other" it reuses this for "one", "few", "many", etc.). This should not be a problem for the user, since the alternative would be that users see English source strings for untranslated plural variants, but it is something to keep in mind.
String Catalog does not seem to support the predicate localisations. Those .strings files remain.
This converts most .strings and .stringsdict files into .xcstrings files using Xcode's migration tool. My primary motivation for this was to have a better translation workflow with Crowdin.
String Catalog files have advantages:
The workflow with Crowdin is also simpler, because XLIFF can be avoided altogether. I will update the documentation once this is merged, but to summarise it here: the .stringsdict files are imported and export to and from Crowdin directly.
There were some challenges to overcome:
String Catalog does not seem to support the predicate localisations. Those .strings files remain.