Translation
Every String (snippet of text) in the Madek Webapp is not embedded in the source
code directly. Instead, they are stored with a certain key
,
which is used to reference that string from the source code.
Example: home_banner_welcome_title
→ "Hello World!"
These translations are stored in a table/spread sheet in the repository.
It can be viewed at and downloaded from GitHub.
Current version: translations.csv
(The "Raw" button points to the downloadable file)
There can be one column per language, enabling translation of Madek into
different languages.
The default language is German (de
).
Tip: It is possible to search for a specific key
on github to see where it is
used in the source code.
Ex.: https://github.com/Madek/madek-webapp/search?utf8=✓&q=sitemap_my_archive
Translator Guidelines
Edit translations or start a new one by opening the translations.csv
file in a
spreadsheet editor (LibreOffice, Google Docs, Excel).
This file is found in the madek-webapp
repository under config/locale/translations.csv
.
After editing it with an editor, it needs to be exported to csv
again and checked into the repository.
Usage in source code
Ruby:
Rails Guide: Rails Internationalization (I18n) API
I18n.locale = 'de'
string = t(:the_key_name)
string = I18n.t(:the_key_name) # when the short helper is not available
JavaScript/CoffeeScript:
t = require('app/assets/javascripts/lib/string-translation.coffee')('de')
string = t('the_key_name')
Rules for developers
Reasoning: keep it simple and consistent to make search and replace more easy later.
- Ruby: Always use symbols for keys.
- Ruby/JS: Never build a key dynamically (for example by defining a 'base key'
and then appending some specific name at the end inside a
map
).
# BAD:
section = 'foo'
[{ id: 'bar', n: 1}, { id: 'baz', n: 2}].map do |id, n|
puts t("#{section}_#{id}") + ': ' n
end
# GOOD:
[{ title: t(:foo_bar), n: 1}, { title: t(:foo_baz), n: 2}].map do |title, n|
puts title + ': ' n
end