@translata/node
v0.2.6
Published
Node functionality for translata: The Composable Translation Utility
Downloads
6
Maintainers
Readme
@translata/node
Provides middlewares focused on node usage.
Installation
yarn add @translata/core @translata/node
Documentation
withTranslationFile
Reads translations from the given file and stores them for the given locale. Currently json and yaml files are supported.
// en.json
{
"global.hello": "Hello User!",
"global.bye": "Bye User!"
}
// de.yaml
global.hello: Hallo Benutzer!
global.bye: Tschüss Benutzer!
import { createTranslator } from '@translata/core';
import { withTranslationFile } from '@translata/node';
const _ = createTranslator(
withTranslationFile('en', resolve(__dirname, 'en.json')),
withTranslationFile('de', resolve(__dirname, 'de.yaml')),
);
_('global.hello', { locale: 'en' }); // Hello User!
_('global.bye', { locale: 'de' }); // Tschüss Benutzer!
withTranslationDirectory
Loads translation files from a directory, detecting namespacing and locales.
By default, the middleware will check for files in the given directory that matches the pattern {{namespace}}.{{locale}}.(json|yaml|yml)
. So, a valid file name would be like global.en.json
.
Lets imagine we have a structure like:
i18n/
global.en.json
global.de.json
labels.de.json
labels.en.json
Then we could setup the middleware like:
import { createTranslator } from '@translata/core';
import { withTranslationDirectory } from '@translata/node';
const _ = createTranslator(
withTranslationDirectory(resolve(__dirname, 'i18n')),
);
_('global.hello', { locale: 'en' }); // Hello User!
_('global.bye', { locale: 'de' }); // Tschüss Benutzer!
_('labels.cancel', { locale: 'de' }); // Abbrechen
Notice that the namespace, which is part of the filename, is automatically applied as prefix to our translation ids. If you don't want that, you can pass a custom pattern without a namespace. In this case, translation ids are taken as they are, without modification:
import { createTranslator } from '@translata/core';
import { withTranslationDirectory } from '@translata/node';
const _ = createTranslator(
withTranslationDirectory(resolve(__dirname, 'i18n'), {
pattern: '{{locale}}.json',
}), // finds files like i18n/de.json
);
You could also pass a pattern which will allow you to place each namespace in its own folder, like so:
import { createTranslator } from '@translata/core';
import { withTranslationDirectory } from '@translata/node';
const _ = createTranslator(
withTranslationDirectory(resolve(__dirname, 'i18n'), {
pattern: '{{namespace}}/{{locale}}.json',
}), // finds files like i18n/global/de.json
);
withSystemLocale
Detects the system locale and sets it as value option for the following middlewares.
import { createTranslator } from '@translata/core';
import { withSystemLocale } from '@translata/node';
const _ = createTranslator(
withTranslationDirectory(resolve(__dirname, 'i18n')),
withSystemLocale(),
);
_('global.hello'); // Locale of the current system is passed, like { locale: 'en' }
Combine it with withFallbackLocale
to have a fallback ready:
import { createTranslator, withFallbackLocale } from '@translata/core';
import { withSystemLocale } from '@translata/node';
const _ = createTranslator(
withTranslationDirectory(resolve(__dirname, 'i18n')),
withFallbackLocale('en')
withSystemLocale()
);
_('global.hello'); // Locale of the current system is passed, like { locale: 'fr' } with fallback to { locale: 'en' }