6.9 KiB
Internationalization
Internationalization (often abbreviated i18n since there are 18 characters between the first "i" and the last "n" in that word) allows Evennia's core server to return texts in other languages than English - without anyone having to edit the source code.
Language-translations are done by volunteers. Therefore language support can vary a lot depending on when they were last updated. Below are all languages (besides English) with som level of support. Generally, any language not updated after May 2021 will be missing translations.
+---------------+----------------------+--------------+
| Language Code | Language | Last updated |
+===============+======================+==============+
| es | Spanish | Aug 2019 |
+---------------+----------------------+--------------+
| fr | French | Nov 2018 |
+---------------+----------------------+--------------+
| it | Italian | Feb 2015 |
+---------------+----------------------+--------------+
| ko | Korean(simplified) | Sep 2019 |
+---------------+----------------------+--------------+
| la | Latin | Feb 2021 |
+---------------+----------------------+--------------+
| po | Polish | Feb 2019 |
+---------------+----------------------+--------------+
| pt | Portugese | Dec 2015 |
+---------------+----------------------+--------------+
| ru-RU | Russian (Russia) | Apr 2020 |
+---------------+----------------------+--------------+
| sv | Swedish | June 2021 |
+---------------+----------------------+--------------+
| zh-Hans | Chinese (simplified) | May 2019 |
+---------------+----------------------+--------------+
Language translations are found in the evennia/locale folder. Read below if you want to help improve an existing translation of contribute a new one.
Changing server language
Change language by adding the following to your mygame/server/conf/settings.py
file:
USE_I18N = True
LANGUAGE_CODE = 'en'
Here 'en' (the default English) should be changed to the abbreviation for one
of the supported languages found in locale/ (and in the list above). Restart
the server to activate i18n.
Even for a 'fully translated' language you will still see English text
in many places when you start Evennia. This is because we expect you (the
developer) to know English (you are reading this manual after all). So we
translate hard-coded strings that the end player may see - things you can't
easily change from your mygame/ folder. Outputs from Commands and
Typeclasses are generally not translated, nor are command/log outputs -
and these are likely to be the brunt of the text the player will see.
Windows Note: If you get errors concerning
gettextorxgettexton Windows, see the Django documentation. A self-installing and up-to-date version of gettext for Windows (32/64-bit) is available on Github.
Translating Evennia
Evennia offers translations of hard-coded strings in the server, things like
"Connection closed" or "Server restarted", strings that end users will see and
which game devs are not supposed to change on their own. Text you see in the log
file or on the command line/log are *not* translated.
In addition, text in default Commands and in default Typeclasses will *not* be
translated by switching *i18n* language. To translate Commands and Typeclass
hooks you must overload them in your game directory and translate their returns
to the language you want. This is because from Evennia's perspective, adding
*i18n* code to commands tend to add complexity to code that is *meant* to be
changed anyway. One of the goals of Evennia is to keep the user-changeable code
as clean and easy- to-read as possible.
Translations are found in the core evennia/ library, under
evennia/evennia/locale/. You must make sure to have cloned this repository
from Evennia's github before you can proceed.
If you cannot find your language in evennia/evennia/locale/ it's because noone
has translated it yet. Alternatively you might have the language but find the
translation bad ... You are welcome to help improve the situation!
To start a new translation you need to first have cloned the Evennia repositry with GIT and activated a python virtualenv as described on the Setup Quickstart page.
Go to evennia/evennia/ - that is, not your game dir, but inside the evennia/
repo itself. If you see the locale/ folder you are in the right place. Make
sure your virtualenv is active so the evennia command is available. Then run
evennia makemessages --locale <language-code>
where <language-code> is the two-letter locale code
for the language you want to translate, like 'sv' for Swedish or 'es' for
Spanish. After a moment it will tell you the language has been processed. For
instance:
evennia makemessages --locale sv
If you started a new language, a new folder for that language will have emerged
in the locale/ folder. Otherwise the system will just have updated the
existing translation with eventual new strings found in the server. Running this
command will not overwrite any existing strings so you can run it as much as you
want.
Next head to locale/<language-code>/LC_MESSAGES and edit the **.po file you
find there. You can edit this with a normal text editor but it is easiest if
you use a special po-file editor from the web (search the web for "po editor"
for many free alternatives).
The concept of translating is simple, it's just a matter of taking the english
strings you find in the **.po file and add your language's translation best
you can. The **.po format (and many supporting editors) allow you to mark
translations as "fuzzy". This tells the system (and future translators) that you
are unsure about the translation, or that you couldn't find a translation that
exactly matched the intention of the original text. Other translators will see
this and might be able to improve it later. Finally, you need to compile your
translation into a more efficient form. Do so from the evennia folder again:
evennia compilemessages
This will go through all languages and create/update compiled files (**.mo)
for them. This needs to be done whenever a **.po file is updated.
When you are done, make sure that everyone can benefit from your translation!
Make a PR against Evennia with the updated **.po and *.mo files. Less
ideally (if git is not your thing) you can also attach them to a new post in our
forums.