language-observer
v0.0.1-alpha.1
Published
The LanguageObserver class provides a simple way to manage internationalization in your web application. It automates the process of applying translations and simplifies support for multiple languages.
Downloads
22
Maintainers
Readme
1kB gzipped
Demo
➤ Install
$ yarn add language-observer
➤ Import
import LanguageObserver from 'language-observer';
➤ Usage
const languageObserver = new LanguageObserver();
languageObserver.init({ lang: 'ru' });
translations.js
window.translations = window.translations || {};
window.translations['ru'] = {
app: {
title: {
main: "Приложение",
settings: "Настройки",
},
menu: {
profile: "Профиль",
},
},
buttons: {
save: "Сохранить",
},
};
window.translations['en'] = {
app: {
title: {
main: "Application",
settings: "Settings",
},
menu: {
profile: "Profile",
},
},
buttons: {
save: "Save",
},
};
window.translations['es'] = {
app: {
title: {
main: "Aplicación",
settings: "Configuraciones",
},
menu: {
profile: "Perfil",
},
},
buttons: {
save: "Guardar",
},
};
Switching
document.querySelector('#change-lang-to-es')?.addEventListener('click', () => {
languageObserver.loadLanguage('es');
});
HTML example
<p data-i18n="title.welcome"></p>
<img data-i18n-attr='{"alt": "image.altText"}' src="image.jpg" alt="Default Alt Text">
➤ Options
| Option | Type | Default | Description |
|:------:|:--------:|:-------:|:--------------------------------------------------------------------------------------------------------------------------------|
| lang
| string
| 'ru'
| (Optional) The language code to initialize with. If not provided, the language is detected from the <body>
element's class. |
➤ Methods
| Method | Parameters | Returns | Description |
|:--------------------------------------------------|:----------------------------------------------:|:---------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| init(options?)
| options
: { lang?: string }
| void
| Initializes the observer. If a lang
is provided in options, it loads and applies that language's translations. |
| loadLanguage(lang)
| lang
: string
| Promise
| Loads and applies translations for the specified language. If translations are not found, falls back to the default language and logs a warning. |
| applyTranslations()
| none
| Promise
| Applies the current translations to all elements with data-i18n
and data-i18n-attr
attributes on the page. Useful for updating translations after dynamic content changes. |
| updateTranslations()
| none
| void
| Manually updates translations on the page. Call this method after adding new translations to window.translations
to apply them without changing the language or reloading the page. |
| loadTranslations(lang, loader)
| lang
: string
loader
: (lang) => Promise
| Promise
| Asynchronously loads translations for the specified language using the provided loader
function, then applies them if the language matches the current language. |
| getNestedTranslation(obj, path)
(static method) | obj
: object
path
: string
| any
| Retrieves a nested translation value from an object using a dot-separated key path. Returns undefined
if the key does not exist. |
➤ Example of using methods
Using the loadTranslations
method
async function fetchTranslations(lang) {
const response = await fetch(`/locales/${lang}.json`);
return response.json();
}
languageObserver.loadTranslations('fr', fetchTranslations);
Using the getNestedTranslation
method
const nestedValue = LanguageObserver.getNestedTranslation(
window.translations['en'],
'app.menu.profile'
);
console.log(nestedValue);
➤ License
language-observer is released under MIT license