Localization is the process of translating the user interface and data into the language and formats of the user.
ARK2 uses the following components for localization and translation:
- The Symfony Intl component as a wrapper for the PHP Intl extension and ICU, for collation, formatting and parsing
- The Symfony Translation component for translation
- The standard JS Intl API, or the Intl Polyfill where Intl is not available
- Translations are stored in the core database
- Translations are exported into XLIFF file format, allowing offline apps to download the full catalogue
- Translations uses keys rather than source strings
- Translations will be split in a number of catalogues:
- Core interface
- User interface
- Admin interface
- Schema (one for each created)
- Actor and User IDs are translated live using a custom loader from the database
The Admin Interface provides a basic interface for the maintaining of translation. Export and import interfaces are provided for the chosen online translation community.
Translation workflow will have two modes, Debug and Live.
- In Debug mode, the database is the canonical source for translations
- In Live mode, the XLIFF files are the canonical source
In Debug mode:
- Translations can be disabled in the site.json file for testing or development purposes
- Translations are loaded live from the database
- Translation Admin page shows stats, allows editing of translations, and import/export to XLIFF (also to translation website)
- Translation extractors can be run to extract the used keys from code files
- Translations can be edited in the Translation Profiler page
- Profiler bar shows translation stats for the page
- Profiler page allows live editing of translations used on the page with persistence back to the database and flagging as fuzzy
In Live mode:
- Translations are always active, sites.json disable is ignored
- Translations are loaded from the XLIFF files, database is only used for Actors/Users
- Translation Admin page is available, but changes do not take effect until exported to XLIFF
No existing package supports our requirements so we will need to fork a number of existing projects (see below):
- Translation extractors
- Translation admin page
- Translation Profiler page
Design Decisions To Be Made
Potential online portals include:
- Transifex - Market leader, but now closed source, offers free hosting to open source projects, large community, great features and automated workflow, API, Github integration, etc.
- Zanata - A Red Hat open-source project (in response to Transifex going closed) with free hosting and large existing community, or can be self-hosted (JBoss based), great features and automated workflow, API, Github integration, etc. No RTL?
- Weblate - An open-source project with free and paid-for hosting, but no central community, or can be self-hosted, good features, API, Github integration, etc. Django based.
- https://localise.biz/ Free or GBP5 p/m plan may be enough, good api, Symfony bundle
- Translation Project - A FSF open-source project with free hosting and large existing community, but very basic features and manual workflow.
- Pootle - An open-source project, self-hosted, Django based
Zanata would seem the preferred option for a hosted service, but Weblate might be better if self-hosting.
A number of options exist for automating extraction of Symfony translations, or for allowing interactive editing inside the admin panel or profiler panel:
None of these quite match our requirements, but may be adapted to achieve our workflow.