Функция i18n
может использоваться:
Для работы с разными языками используется один шаблон.
-
Для библиоткеи
bem-bl
В BEMHTML:
block('block').content()(function() { return { elem: 'tooltip', content: BEM.I18N('block', 'tooltip'); }; });
В BH:
bh.match('block', function (ctx) { ctx.content({ elem: 'tooltip', content: bh.lib.i18n('block', 'tooltip'); }); });
-
Для библиоткеи
bem-core
В BEMHTML функция
i18n
доступна черезthis.i18n
:block('block').content()(function() { return { elem: 'tooltip', content: this.i18n('block', 'tooltip'); }; });
В BH:
bh.match('block', function (ctx) { ctx.content({ elem: 'tooltip', content: bh.lib.i18n('block', 'tooltip'); }); });
Cпособы использования i18n
в JavaScript зависят от наличия модульной системы и ее типа. Файлы могут подключаться как в Node.js, так и в браузере, независимо от используемой библиотеки (bem-bl
или bem-core
):
Скомпилированный файл подключается как модуль в формате CommonJS.
var i18n = require('bundle.lang.en.js'); // Путь до скомпилированного файла
i18n('scope', 'key'); // 'val'
В браузере применение скомпиллированных ?.lang.<lang>.js
-файлов зависит от наличия модульной системы:
-
В браузере без YModules как
BEM.I18N
BEM.I18N('scope', 'key'); // Ядро `i18n` предоставляется в глобальную видимость в переменную `BEM.I18N`. // Ядро `i18n` подключается в модульную систему (YModules или CommonJS) как отдельный модуль с именем `i18n`.
-
В браузере с YModules как
i18n
-модульmodules.require('i18n', function (i18n) { i18n('scope', 'key'); // 'val' });
Важно! В проект с модульной системой ядро библиотеки интернационализации подключаются одинаково, как модуль
i18n
, вне зависимости от используемой библиотекиbem-core
илиbem-bl
.