Комментарии 9
Или i18n или l10n.
+2
Всё-таки мне кажется, что для переводов важен контекст, поэтому переводить нужно всю шаблонизированную строку, а не отдельные её части.
Например: "${name}'s team" ("Vasya Pupkin's team") -> "Команда ${name}" ("Команда Васи Пупкина"), конечно, тут ещё проблема со склонением имён, но даже без проблемы склонения имён, порядок слов изменился.
Кроме того, часто нужен контекст (чтобы "name" в одних случаях переводилось как "имя", а в других — "наименование"), где можно было бы добавить в том числе и внешнюю информацию (пол {М/Ж}, число {единственное/множественное}, и тд и тп).
Например: "${name}'s team" ("Vasya Pupkin's team") -> "Команда ${name}" ("Команда Васи Пупкина"), конечно, тут ещё проблема со склонением имён, но даже без проблемы склонения имён, порядок слов изменился.
Кроме того, часто нужен контекст (чтобы "name" в одних случаях переводилось как "имя", а в других — "наименование"), где можно было бы добавить в том числе и внешнюю информацию (пол {М/Ж}, число {единственное/множественное}, и тд и тп).
+1
Я думаю на основе аргументов которые попадают в функцию, вполне можно провести подобный перевод :) Еще упустил момент, можно использовать например так:
Допустим передать язык или формат:
bar()`Everything is ${desc}!`;
Допустим передать язык или формат:
lang('ru')`Everything is ${desc}!`;
lang('name', 'number')`${name}'s team is about ${count}`;
0
Такой вызов лично для меня выглядит ужасно, тем не менее, спасибо за демонстрацию такой возможности ES6. В своём проекте я бы такой синтаксис не использовал, а взял бы i18next:
P.S. В i18next учтено много нюансов, просто для комментария выбрал один из готовых примеров.
{
"en": {
"translation": {
"key": "item",
"key_plural": "items",
"keyWithCount": "{{count}} item",
"keyWithCount_plural": "{{count}} items"
}
}
}
i18next.t('key', {count: 0}); // output: 'items'
i18next.t('key', {count: 1}); // output: 'item'
i18next.t('key', {count: 5}); // output: 'items'
i18next.t('key', {count: 100}); // output: 'items'
i18next.t('keyWithCount', {count: 0}); // output: '0 items'
i18next.t('keyWithCount', {count: 1}); // output: '1 item'
i18next.t('keyWithCount', {count: 5}); // output: '5 items'
i18next.t('keyWithCount', {count: 100}); // output: '100 items'
P.S. В i18next учтено много нюансов, просто для комментария выбрал один из готовых примеров.
0
Спасибо за статью, интересно было почитать про TTL. А для локализации я для себя кроме gettext-совместимых решений пока что ничего не нашёл.
0
Спасибо автору! Статья пришлась очень к стати. Реализовал подобный функционал у себя в библиотеке (i18n-for-browser).
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
L10n строк в приложениях (JavaScript)