NOTE: This documentation was written for people with a technical background. If you do not have a technical background, consider reading this guide instead.
Last Updated: 2022-08-23
coinos's internationalization system depends on the npm
package sveltekit-i18n
. Consider reading its documentation in addition to this.
The main code for coinos's internationalization is at src/lib/translations/index.js
. When imported, it does the following:
- Load all of the locales asynchronously, based on .
- Initialize
sveltekit-i18n
.
It also defines important constants, including the list of available locales and the default locale. This code is loaded by importing $lib/translations
in src/routes/+layout.svelte
. This code, which runs in the frontend, also persists the locale in localStorage
.
Each locale in coinos-ui-v2
is defined by a JSON file in src/locales
. Its name is the locale's ISO 639-1 code plus .json
. It is simply a file that maps string IDs to translated strings. Here is an example of en.json
:
{
"howItWorks": "How it works",
"faq": "FAQ",
"about": "About",
"startInSeconds": "Start in Seconds",
"signIn": "Sign In"
}
Strings are internationalized by simply using sveltekit-i18n
's $t
function. A localized string looks like this:
{$t('stringID')}
coinos also has a LocaleSelector
component, which should be used to select locales. It is a dropdown that allows you to select & update the locale.
coinos has a Python script that helps you with the technical parts of translation. It is located at src/locales/guided_translation.py
. It also has some utility functions:
nested_dict_keys
- gets a list of keys of a nested dictionary in dot-separated shallow format (e.g. a.b.c)create_locale
- adds a new locale to the lang.json filelocalize_string
- localizes a string interactively