In this case, you can add the missing translations yourself on Transifex, which is an independent online platform/service used by the Discourse team to manage translations.
For example, the current status for Persion is as follows:
In general, there are a few reasons for an English label in a localized instance:
- The string is translatable and translated, just not yet in the version you’re running, or
- The string is translatable, but just not yet translated in your language, or
- The string is not yet translatable (but rather hardcoded in the code), or
- The string is not translatable within the scope of Discourse core (e.g. if it comes from a plug-in).
In order to investigate this, you can…
Go to Admin / Customize / Text Content in your Discourse instance and search for the untranslated string, and if you find it, it’s translatable and just not yet translated (or at least not in the version you’re running),
Go to Transifex (for which you will need to sign-up and probably apply to join the team there), and if you find the string untranslated, go ahead and translate it.
Go to GitHub and search for the string (which will search both in the code and in the translations):
Check out the Discourse code and search for the string (assuming you are using Linux or you have git for Windows installed):
$ git clone https://github.com/discourse/discourse.git $ cd discourse $ grep -R "foobar" .
I have to say this was a rather special case, but basically I looked for “Berechtigungen” (which I saw in the screenshot and is German for “Permissions”) in Transifex. This lead me to the I18n key
admin_js.admin.user.permissions (see below). Then I looked for the key in the code and found it (without the prefix admin_js) here, from which the lines referenced above weren’t far away.