2016-01-28 4 views
2

В моем приложении я могу локализовать большую часть строк через теги, как описано в l20n.js docs. Но иногда мне приходится локализовать динамически созданные строки. Например: document.getElementById(id).innerHTML = "some text";L20n.js: локализовать динамически созданные строки

Я использую Polymer и пользовательские веб-компоненты, поэтому основная цель - создать одну функцию для любого случая локализации. Если я попробую document.l10n.get(string);, я получаю TypeError: document.l10n.get is not a function.

Каков наилучший способ сделать это? Не удалось найти решение в официальных документах.

ответ

1

Поскольку document.l10n является экземпляр класса View в L20n, вы можете использовать formatValue и formatValues метод для вашего сценария использования. Подробности см. На странице documentation.

Оба метода возвращают обещания так что вам нужно сделать что-то вроде следующего:

document.l10n.formatValue('hello', { who: 'world' }).then(
    hello => document.getElementById(id).textContent = hello 
); 

Вы можете назначить textContent или innerHTML. Имейте в виду, что L20n позволяет использовать HTML в переводах, и он только унижает их при использовании декларативного подхода data-l10n-id. Поэтому, если вы хотите вручную назначить innerHTML, вы можете убедиться, что доверяете содержимому переводов. В будущем я хотел бы добавить специальный API для применения переводов к элементам DOM с использованием той же санитарии, что и декларативный метод (ошибка 1228021).