Forum

Methodology

Toolbox

Platform

Community

The translation of this article into your language is missing, you can help us translate.

API технологий

Пакет предоставляет следующие технологии:

  • keysets — служебная технология для сбора исходных файлов с переводами.
  • i18n — технология, которая формирует общий бандл с переводами для каждого языка.
  • keysets-xml — технология для локализации проектов, использующих XSLT для шаблонизации.

keysets

Служебная технология, результат работы которой используется другими технологиями пакета enb-bem-i18n. Собирает данные (keysets) для указанного языка в ?.keysets.<lang>.js-файл на основе <lang>.js-файлов.

Опции

target

Тип: String. По умолчанию: ?.keysets.<lang>.js.

Имя файла, куда будет записан результат сборки необходимых <lang>.js-файлов проекта — скомпилированный файл ?.keysets.<lang>.js.

?.keysets.<lang>.js-файл — это промежуточный результат сборки, который в дальнейшем используется технологией i18n.

lang

Тип: String. Обязательная опция.

Язык, для которого необходимо собрать файл.

Допустимые значения:

  • 'lang' — значение языка (двухбуквенный код языка, например, 'en', 'ru'), для которого будут собраны данные (keysets) из файлов <lang>.js.

  • '{lang}' — директива, которая вызывает технологию необходимое количество раз с поочередной подстановкой в 'lang' всех языков, указанных в параметрах функции config.setLanguages().

dirsTarget

Тип: String. По умолчанию: ?.i18n.

Имя таргета, откуда будет доступен список исходных директорий для сборки. Список директорий предоставляет технология files пакета enb-bem-techs.

sourceDirSuffixes

Тип: String | String[]. По умолчанию: ['.i18n'].

Суффиксы директорий, по которым происходит отбор для дальнейшей сборки.


Пример

var KeysetsTech = require('enb-bem-i18n/techs/keysets'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

module.exports = function(config) {
    config.setLanguages(['en', 'ru']);

    config.node('bundle', function(node) {
        // Получаем FileList
        node.addTechs([
            [FileProvideTech, { target: '?.bemdecl.js' }],
            [bemTechs.levels, { levels: ['blocks'] }],
            [bemTechs.deps],
            [bemTechs.files]
        ]);

        // Собираем keyset-файлы для каждого языка
        node.addTech([KeysetsTech, { lang: '{lang}' }]);
        node.addTarget('?.keysets.{lang}.js');
    });
};

i18n

Собирает ?.lang.<lang>.js-файлы для отдельных языков на основе данных из ?.keysets.<lang>.js-файлов, полученных в результате использования технологии keysets.

i18n — технология сборки, которая транслирует данные из ?.keysets.<lang>.js-файлов в JavaScript.

Технология i18n инициализирует ядро i18n данными из объединенных keyset-файлов и возвращает функцию i18n, которую можно использовать из шаблонов или клиентского JavaScript.

API функции i18n описан в разделе API i18n.

Опции

target

Тип: String. По умолчанию: ?.lang.<lang>.js.

Имя файла, куда будет записан результат сборки данных из ?.keysets.<lang>.js-файла — скомпилированный файл ?.lang.<lang>.js.

lang

Тип: String. Обязательная опция.

Язык, для которого необходимо собрать файл, содержащий строки переводов.

Допустимые значения:

  • 'lang' — значение языка (например, 'en', 'ru'), для которого будут собраны данные (keysets) из файлов <lang>.js.

  • '{lang}' — специальная директива, которая вызывает технологию необходимое количество раз с поочередной подстановкой в 'lang' всех языков, указанных в параметрах функции config.setLanguages().

keysetsFile

Тип: String. По умолчанию — ?.keysets.<lang>.js.

?.keysets.<lang>.js-файл — это результат выполнения keysets — набор данных (keysets) для указанного языка, который используется технологией i18n для формирования ?.lang.<lang>.js-файлов.

exports

Тип: Object. По умолчанию — { globals: true, commonJS: true, ym: true }.

Настраивает способ получения функции i18n.

Возможные опции:

  • globals: true — функция i18n будет доступна из глобальной переменной BEM.I18N, если в среде исполнения нет модульных систем. Чтобы глобальная переменная была доступна при наличии модульных систем, нужно указать специальное значение globals: 'force'.
  • commonJS: true — скомпилированный файл можно подключить как CommonJS модуль.
  • ym: true — функция i18n будет доступна из модульной системы YModules.

Пример

var I18NTech  = require('enb-bem-i18n/techs/i18n'),
    KeysetsTech = require('enb-bem-i18n/techs/keysets'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

module.exports = function(config) {
    config.setLanguages(['en', 'ru']);

    config.node('bundle', function(node) {
        // Получаем FileList
        node.addTechs([
            [FileProvideTech, { target: '?.bemdecl.js' }],
            [bemTechs.levels, { levels: ['blocks'] }],
            [bemTechs.deps],
            [bemTechs.files]
        ]);

        // Собираем keyset-файлы для каждого языка
        node.addTech([KeysetsTech, { lang: '{lang}' }]);

        // Собираем i18n-файлы для каждого языка
        node.addTech([I18NTech, { lang: '{lang}' }]);
        node.addTarget('?.lang.{lang}.js');
    });
};

keysets-xml

Собирает ?.keysets.<lang>.xml-файлы на основе ?.keysets.<lang>.js-файлов.

Технология keysets-xml применяется для локализации сервисов, использующих XSLT для шаблонизации. Используется для локализации XML-страниц.

Опции

target

Тип: String. По умолчанию — ?.keysets.{lang}.js.

Результирующий XML-файл.

lang

Тип: String. Обязательная опция.

Язык, для которого небходимо собрать файл.


Пример

var KeysetsTech = require('enb-bem-i18n/techs/keysets'),
    KeysetsXMLTech = require('enb-bem-i18n/techs/keysets-xml'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

module.exports = function(config) {
    config.setLanguages(['en', 'ru']);

    config.node('bundle', function(node) {
        // Получаем FileList
        node.addTechs([
            [FileProvideTech, { target: '?.bemdecl.js' }],
            [bemTechs.levels, { levels: ['blocks'] }],
            [bemTechs.deps],
            [bemTechs.files]
        ]);

        // Собираем keyset-файлы для каждого языка
        node.addTech([KeysetsTech, { lang: '{lang}' }]);

        // Собираем XML-файлы для каждого языка
        node.addTech([KeysetsXMLTech, { lang: '{lang}' }]);
        node.addTarget('?.keysets.{lang}.js');
    });
};
If you notice a mistake or want something to supplement the article, you can always write to us at GitHub, or correct an article using prose.io.