We want to make Immich accessible to as many users as possible. One important step towards this goal is the localization of mobile app and web. We are very thankful for all contributions that provide new translations or update/extend existing ones.
Translations using localizely (no programming skills required)
We use the tool localizely to manage translations. It allows to edit translations in an easy-to-use web-based application. Please contact us if you want to contribute translations using localizely, for example via discord.
Translation of the mobile application without localizely (programming skills required)
The mobile application is localized with the help of the easy_localization library.
All translations are stored in JSON files located at mobile/assets/i18n
.
Our default localization resource is en-US.json
. It must contain all used translation keys! If a translation key is missing in any of the other files, the value in en-US
is used as a fallback. If you edit one of the JSON-files, please use an indentation of 2 spaces.
Translations are used in the app's code by calling tr()
on a translation key string. For example:
return 'login_form_err_http'.tr();
If a Text
component is used, tr()
should be called on the component. For example:
Text("exif_bottom_sheet_location").tr(),
Adding new languages
Adding new languages requires the following steps:
- Create the translation JSON-file
xx-XX.json
. - Translate as many keys as possible. Please use the keys from
en-US.json
. - Add the language to
main.dart
:
var locales = const [
Locale('en', 'US'),
Locale('de', 'DE'),
// ...
Locale('xx', 'XX'), // Add this
];
- Add the language to
ios/Runner/Info.plist
:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>de</string>
<string>xx</string>
</array>
- Test your translations.
Translation of Immich web
TODO
Dedicated to my wife and my children