Kimai can be localized to any language and is already translated to Arabic, Czech, Danish, German, German (Swiss), Greek, English, Esperanto, Spanish, Basque, Persian, Finnish, Faroese, French, Hebrew, Croatian, Hungarian, Italian, Japanese, Korean, Norwegian (Bokmål), Dutch, Polish, Portuguese, Portuguese (Brazilian), Romanian, Russian, Slovakian, Swedish, Turkish, Ukrainian, Vietnamese, Chinese (traditional), Chinese (simplified)
Feel free to send your self-made language files or contributing to the weblate project below – we’re looking for translators and would appreciate your support!
All translations in Kimai are managed at Weblate and should be changed there exclusively! Do not chang ethe source files of Kimai.
If you want to change certain keys in your installation, you can use the Translation plugin for that.
The following documentation is not meant for end-users or translators. It is a technical documentation for the folks working on the Kimai code.
We try to separate translations in logical units, in order to make it easier to identify the location of application messages.
en
version (as english is the fallback language for all missing keys in any language)messages
as it holds the most important application translationsThe files in translations/
as a quick overview:
about
- the about screen with license informationactions
- the “action” dropdowns in all data-tablesemail
- contents for the system emails generated by Kimai (eg. user registration and password reset)daterangepicker
- the date range picker dialog to choose a timeframe in screens with data-tablesexceptions
- error pages and exception handlersflashmessages
- success and error messages (alerts), which will be shown after submitting datainvoice-calculator
- invoice calculator types (see Adding invoice calculator
in developers-section)invoice-numbergenerator
- invoice calculator (see Adding invoice-number generator
in developers-section)invoice-renderer
- holds translations of all invoice templates (read more)messages
- most of the visible application translations (like menu, buttons and forms)plugins
- the plugin screensystem-configuration
- all system configuration, which can be changed through the UItags
- the tags administration screenteams
- the team administration screenvalidators
- related to violations/validation of submitted form data (or API calls)The authentication screens (login, registration, register account) are translated through the theme bundle which is used in Kimai. The bundle can be found here and the translations in this directory.
When you create a new translation, please open a Pull Request in this repository as well.
This example assumes you are creating the (not existing) locale xx
.
Copy each translation from it’s english version translations/*.en.xlf
and rename them to translations/*.xx.xlf
.
Adjust the target-language
attributes in the file header, as example for the new file exceptions.xx.xlf
:
<file source-language="en" target-language="xx" datatype="plaintext" original="exceptions.en.xlf">`
For a language variant xx_YY
, the fallback will always be the base language xx
(eg. de
for de_CH
).
Only some specific keys may need to be changed for this variant, and it’s possible to add only the respective files like i.e. translations/messages.de_CH.xlf
including only the changed translations:
<?xml version="1.0" encoding="utf-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="de" target-language="de-CH" datatype="plaintext" original="messages.en.xlf">
<body>
<trans-unit resname="action.close">
<source>action.close</source>
<target>Schliessen</target>
</trans-unit>
</body>
</file>
</xliff>
Locale formats are derived from the file config/locales.php
which is auto-generated with the command:
bin/console kimai:reset:locales
You need to activate a new locale (so it can be used in routing) in the file config/services.yaml
at parameters.app_locales
divided by a pipe:
parameters:
locale: en
app_locales: en|de|fr|ru|vi|zh_CN
The number formats are determined from the user locale.
The date and time formats are determined from the user locale.
There are configurations in place to convert between javascript components (e.g. the date-picker) and the PHP backend.
Whether Kimai displays data in 24 hour or AM/PM format depends on the user locale.
Run the following command, which will generate the correct XLIFF attributes for you:
bin/console kimai:translation --resname
This will validate if the technical changes are okay / if the changed and new files can be used by Kimai:
bin/console lint:xliff translations
You can search for missing keys by issuing this command (replace xx
with your locale):
bin/console debug:translation --only-missing de
or
bin/console translation:update --dump-messages --force de