META: Internationalization / add translations
We want to start translating GitLab so everyone in the world can collaborate.
This is primarily driven by requirements from a partner, hence some of the questions below.
High level goals
- minimize performance impact
- minimize engineering overhead
- easy to contribute translations for everyone in the community
- ability to do this iteratively, both the translation as the implementation
Out of scope
- Right-to-left languages
- Translating the documentation
- Start small, one page at the time. First page should be cycle analytics, as it's not crucial to workflows.
- Only support left-to-right languages
- Start sooner (9.1 at earliest) rather than later to learn from experience
Translate GitLab to Filipino
Translate GitLab to Indonesian
Translate GitLab to Turkish
- Translate GitLab to Arabic #44274 (closed)
Translate GitLab to Czech
Translate GitLab to Hungarian
- Translate GitLab to Galician #43232 (closed)
Translate GitLab to Norwegian
Translate GitLab to Urdu
Helpers and process
- Translate date strings #39283 (closed)
- Improve externalization helper for links
msgctxtsupport for proper context in pot files #40347
- Automatic merge of Crowdin translations #39309
Platform Pages ~Platform
- Cycle Analytics Page #28433 (closed) (%9.2)
- Project Page & Repository Page #31499 (closed) (%9.3)
- Commits Page #32793 (closed) (%9.4)
- Activity Page #32795 (closed) (%10.0)
- Group Page #32782 (closed) (%10.1)
- Branches Page #32797 (closed) (%10.1)
- Wiki !14534 (merged) (%10.1)
- Tags Page #38589 (closed) (%10.2)
- Contributors Page #38592 (closed) (%10.2)
- Compare Page #41331 (closed) (%10.4)
- Graph Page #41330 (closed) (%10.5)
- Charts Page #41332 (closed) (%10.5)
- Locked Files Page gitlab-ee#4929 (closed) (%10.6)
- Audit Events
- Dashboard Projects Page
- Dashboard Group Page
- Dashboard Activity Page
- Web IDE #45022
Discussion Pages ~Discussion
- #34416 (closed) Internationalize issue sidebar title labels and empty labels
- Issue page
- Issue list page (project, group, dashboard)
- Merge request page
- Merge request list page (project, group, dashboard)
CI/CD Pages ~"CI/CD"
- CI/CD > Pipelines (list)
- CI/CD > Pipelines (new)
- CI/CD > Pipelines (details)
- CI/CD > Jobs (list)
- CI/CD > Jobs (details)
- CI/CD > Schedules (list): #34932 (closed) (%9.4)
- CI/CD > Schedules (new/edit): #34937 (closed) (%9.4)
- CI/CD > Environments (list)
- CI/CD > Environments (new/edit)
- CI/CD > Environments (details)
- CI/CD > Clusters (list)
- CI/CD > Clusters (new)
- CI/CD > Clusters (details)
- CI/CD > Charts
- Settings > CI/CD
- Settings > Pages (list)
- Settings > Pages (new domain)
- CI Lint Page
Prometheus Pages ~Prometheus
- Prometheus Service Configuration (#33338 (closed))
- Performance Dashboard for an Environment
How do I externalize strings?
See documentation: https://docs.gitlab.com/ce/development/i18n_guide.html
Which languages will we support initially?
- Required: French, German, Spanish, Italian, Brazilian Portuguese, Korean, Japanese, Traditional Chinese, Simplified Chinese.
We should start with either Spanish or Brazilian Portuguese, as we have many people at GitLab that are fluent in these languages.
Who does the translating?
Members of the community have been very active contributing translations, and our partner will also help with the initial translation (they have a team available for this).
Where do we store the translations?
How do we retrieve the translations?
Translation Section Tasks
- 1: Setup en locale to have a special dates and times section
- 3: Determine all rails validation error message keys that need to be created
- 3: Setup special sections to support built in rails validation error messages
- 2: Determine all rails model keys that need to be created
- 2: Setup special sections to support rails model and model attributes display translations
- 3: Update all text and dates and times in app/views
- 3: Update all text and dates and times in app/controllers
- 2: Update all text and dates and times in app/finders
- 3: Update all text and dates and times in app/helpers
- 3: Update all text and dates and times in app/mailers
- 3: Update all text and dates and times in app/models
- 2: Update all text and dates and times in app/services
- 1: Update all text and dates and times in app/uploaders
- 1: Update all text and dates and times in app/workers
- 2: Examine extent of use of text in lib
- 3: Update all text and dates and times in lib
- 2: Need plan for static files in public such as 404
- 3: Need to check what is stored in databases that is not user supplied but generated, this text should be translated before being saved
- 3: Manual QA to ensure all strings are encoded, this task occurs mostly after the main effort is completed and is generally a manual process of using the site under a second language and making sure you don't see any English
- Do we foresee us translating any upstream gems that are referenced within the application? If yes, then which ones, and are we aware of a strategy on how we might go about internationalizing those gems.
- We have not included translation of currencies in our estimation. Are there any points in the application where currency translation might be needed?
- Do we intend running automated tests in non-English languages. In that case, a large number of strings in the Rspec & Spinach tests would need to be changed, so that they may get referenced by the i18n translation system. Any take on that?
It would be great to have someone do a detailed review of our task list as we intend to use it in moving ahead with the internationalization effort. And, if we have missed any potential action items within our task list, or over/under estimated any, please do bring it up.