i18n/*.po
Zammad translations are managed exclusively via translations.zammad.org.
You are welcome to contribute. Please get a free account there if you want to do so.
Any pull requests modifying translation files directly will be rejected.
i18n/text_modules/*.yml
Zammad text modules are automatically imported when the first admin user is created, according to this user's language. This is just meant to provide for a smooth start with some existing helpful text modules. They can be modified later on; no subsequent import from the example files will be performed.
Feel free to send pull requests to add more helpful examples to existing files or even files for new languages.
i18n/zammad.*.po
are updated.Translation.sync
gets called, which happens for example during a package update.If changes to translatable strings are made during the development process, developers can just run the following to re-extract the strings to the catalog file:
rails generate translation_catalog
This will update the i18n/zammad.pot
file in Zammad. To do this for an existing addon module, call
rails generate translation_catalog --addon-path /path/to/addon
To test any changes made to translations in Weblate that are not yet published to Zammad, you can use this workflow:
i18n/zammad.pt-br.po
(for pt-br
in this case, use corresponding file names for other languages).rails r Translation.sync
to import the latest state to the database.See i18n.coffee
App.i18n.translateContent('translate and <b>html escape</b> and replace _markup_')
App.i18n.translateInline('translate and <b>html escape</b> and no _markup_')
App.i18n.translatePlain('plain text')
App.Ticket.find(1).created_at
"2021-06-10T09:45:30.394Z"
App.i18n.translateTimestamp(App.Ticket.find(1).created_at)
"10.06.2021 11:45"
App.Ticket.find(1).created_at
"2021-06-10T09:45:30.394Z"
App.i18n.translateDate(App.Ticket.find(1).created_at)
"10.06.2021"
Translation.translate('de-de', '3 high')
"3 hoch"
> obj = ObjectManager::Attribute.find_by(name: 'my_attribute')
=> #<ObjectManager::Attribute:0x0000564593325508
...
[34] pry(main)> obj.data_option['translate'] = true
=> true
[35] pry(main)> obj.save
=> true