Current status
Right now translation handling shows some inconsistency depending on the type
desktop/json/appdata translations
The content of those po files is extracted and injected every night into the respective desktop/json/appdata files.
Issues:
- it produces a bit of work when merging or rebasing content from different branches (for example when updating a work branch).
- it makes editing of those files more complex, for both humans and machines (see the discussion about adding release notes to appdata files in T10972 ).
other translation artifacts
Those include: regular po and ts (generated from po) files loaded at run-time, translated documentation, js scripts for translation support, translated data files (for edu programs).
They are added to the tarball at release time by releaseme or other release scripts.
Issues:
- release process a bit more complex;
- easily forgotten when testing. I18n-related cmake macros allow for loading the translations during compile time, but it needs to be explicitly enabled.
New scenario
Periodically copy all translation artifacts inside each repository (at least daily) under po/.
Server hooks should be added to prevent anyone else but the inject script to change those files.
Benefits
desktop/json/appdata translations
The translations for those files will be injected into the respective files during compilation times, as other projects do, and they won't be installed.
other translation artifacts
They will be copied according the expected structure under po/, as releaseme and other release tools would do.
Issues
Large binary artifacts like data files and documentation images may make the git repositories bigger. Should those be excluded from the injection? Or maybe the LFS should be enforced for them.
Work needed
- change the ki18n_install macro to support the inject the translations of appdata/json/desktop files at compile time, and exclude them from the installation. This will require a bump of the required Frameworks version for all applications who need to use it. Maybe this may wait for Qt6.
- figure out the impact of large files in git;
- figure out whether the two parts of the problem can be implemented separately.