Документация

Документация по разработке bpm’online
PDF
Локализация файлового контента

Glossary Item Box

Общие сведения

Начиная с версии 7.11.3 в bpm'online появилась возможность добавлять файловый контент (*.js-, *.css-файлы, изображения и др.) в пользовательские пакеты.

Файловый контент пакетов — любые файлы, используемые приложением. Файловый контент не обрабатывается web-сервером и является статическим (см. "Статический клиентский контент в файловой системе"), что повышает скорость работы приложения.

Подробнее о файловом контенте можно узнать из статьи "Использование файлового контента в пакетах".

Локализация с использованием конфигурационных ресурсов

Для перевода ресурсов на разные языки рекомендуется использовать отдельный модуль с локализуемыми ресурсами, созданный встроенными средствами разработки bpm'online в разделе [Конфигурация]. Пример исходного кода такого модуля приведен ниже:

define("Module1", ["Module1Resources"], function(res) {
  return res;
});

Для подключения локализуемых ресурсов в модуль, который определяется в файловом контенте пакета, достаточно сослаться на модуль с ресурсами. Например:

define("MyPackage-MyModule", ["Module1"], function(module1) {
  console.log(module1.localizableStrings.MyString);
});

Локализация с использованием плагина i18n

i18n — это плагин для AMD-загрузчика (например, RequireJS), предназначенный для загрузки локализуемых строковых ресурсов. Исходный код плагина можно найти в репозитории https://github.com/requirejs/i18n. Документация доступна по ссылке http://requirejs.org/docs/api.html#i18n.

Чтобы выполнить локализацию файлового контента с помощью плагина RequireJS i18n, выполните следующие действия.

1. Поместите плагин в директорию с *.js-файлами исходных кодов ..\Terrasoft.WebApp\Terrasoft.Configuration\Pkg\MyPackage1\content\js\i18n.js.

Здесь MyPackage1 — рабочий каталог пакета MyPackage1 (см. "Использование файлового контента в пакетах").

2. Создайте каталог ..\MyPackage1\content\nls и поместите в него один или несколько *.js-файлов с локализуемыми ресурсами. Имена файлов могут быть произвольными. Содержимое файлов — AMD модули, объекты которых имеют следующую структуру:

  • Поле "root", содержащее коллекцию ключ-значение, где ключ — это название локализуемой строки, а значение — локализуемая строка на языке по умолчанию. Значение будет использоваться, если запрашиваемый язык не поддерживается.
  • Поля, имена которых являются стандартными кодами поддерживаемых культур (например "en-US", "ru-RU"), а значение имеет логический тип. Может быть true, если поддерживаемая культура включена, и false — если отключена.

Например, добавлен файл ..\MyPackage1\content\js\nls\ContactSectionV2Resources.js со следующим содержимым:

define({
    "root": {
        "FileContentActionDescr": "File content first action (Default)",
        "FileContentActionDescr2": "File content second action (Default)"
    },
    "en-US": true,
    "ru-RU": true
});

3. В каталоге ..\MyPackage1\content\nls создайте папки, названия которых соответствуют коду той культуры, локализация которой будет в них размещена (например "en-US", "ru-RU"). Например, если поддерживаются только русская и английская культуры, то структура каталогов будет следующей:

content
    nls
        en-US
        ru-RU

4. В каждый созданный каталог локализации поместите такой же набор файлов *.js-файлов с локализуемыми ресурсами, как и в корневой папке ..\MyPackage1\content\nls. Содержимое файлов — AMD модули, объекты которых являются коллекциями ключ-значение, где ключ — это наименование локализуемой строки, а значение — строка на языке, соответствующем названию папки (коду культуры).

Например, если поддерживаются только русская и английская культуры, то необходимо создать два файла ContactSectionV2Resources.js. Содержимое файла ..\MyPackage1\content\js\nls\en-US\ContactSectionV2Resources.js, соответствующее английской культуре:

define({
    "FileContentActionDescr": "File content first action",
    "FileContentActionDescr2": "File content second action"
});

Содержимое файла ..\MyPackage1\content\js\nls\ru-RU\ContactSectionV2Resources.js, соответствующее русской культуре:

define({
    "FileContentActionDescr": "Первое действие файлового контента"    
});

ВАЖНО!

Поскольку для русской культуры перевод строки "FileContentActionDescr2" не указан, то будет использовано значение по умолчанию — "File content second action (Default)".

5. Отредактируйте содержимое файла bootstrap.js.

  • Подключите плагин i18n, указав его название в виде псевдонима "i18n" в конфигурации путей RequireJS и прописав соответствующий путь к нему в свойстве paths.
  • Укажите плагину культуру, которая является текущей для пользователя. Для этого свойству config объекта конфигурации библиотеки RequireJS присвойте объект со свойством i18n, которому, в свою очередь, присвойте объект со свойством locale и значением, полученным из глобальной переменной Terrasoft.currentUserCultureName (код текущей культуры).
  • Для каждого файла с ресурсами локализации укажите соответствующие псевдонимы и пути в конфигурации путей RequireJS. При этом псевдоним должен являться URL-путем относительно директории nls.

Пример содержимого файла ..\MyPackage1\content\js\bootstrap.js:

(function() {
    require.config({
        paths: {            
            "MyPackage1-Utilities": Terrasoft.getFileContentUrl("MyPackage1", "content/js/Utilities.js"),
            "MyPackage1-ContactSectionV2": Terrasoft.getFileContentUrl("MyPackage1", "content/js/ContactSectionV2.js"),
            "MyPackage1-CSS": Terrasoft.getFileContentUrl("MyPackage1", "content/css/MyPackage.css"),
            "MyPackage1-LESS": Terrasoft.getFileContentUrl("MyPackage1", "content/less/MyPackage.less"),
            "i18n": Terrasoft.getFileContentUrl("MyPackage1", "content/js/i18n.js"),
            "nls/ContactSectionV2Resources": Terrasoft.getFileContentUrl("MyPackage1", "content/js/nls/ContactSectionV2Resources.js"),
            "nls/ru-RU/ContactSectionV2Resources": Terrasoft.getFileContentUrl("MyPackage1", "content/js/nls/ru-RU/ContactSectionV2Resources.js"),
            "nls/en-US/ContactSectionV2Resources":  Terrasoft.getFileContentUrl("MyPackage1", "content/js/nls/en-US/ContactSectionV2Resources.js")
        },
        config: {
            i18n: {
                locale: Terrasoft.currentUserCultureName
            }
        }
    });
})();

6. Используйте ресурсы в нужном модуле, указав в массиве зависимостей требуемый модуль с ресурсами с префиксом "i18n!". Например, если необходимо использовать локализуемую строку FileContentActionDescr (см. шаги 2, 4) как заголовок для нового действия в разделе [Контакты], то в файл ..\MyPackage1\content\js\ContactSectionV2.js нужно добавить следующее содержимое:

define("MyPackage1-ContactSectionV2", ["i18n!nls/ContactSectionV2Resources", 
    "css!MyPackage1-CSS", "less!MyPackage1-LESS"], function(resources) {
    return {
        methods: {
            getSectionActions: function() {
                var actionMenuItems = this.callParent(arguments);
                actionMenuItems.addItem(this.getButtonMenuItem({"Type": "Terrasoft.MenuSeparator"}));
                actionMenuItems.addItem(this.getButtonMenuItem({
                    "Click": {"bindTo": "onFileContentActionClick"},
                    "Caption": resources.FileContentActionDescr
                }));
                return actionMenuItems;
            },
            onFileContentActionClick: function() {
                console.log("File content clicked!")
            }
        },
        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
    }
});

© Terrasoft 2002-2018.

Был ли данный материал полезен?

Как можно улучшить эту статью?