Pull to refresh

Comments 9

Вы "поправили" на I10n (первая буква — заглавная i), а там либо i18n, либо L10n должно быть. (В теги можно оба варианта добавить.)
Немного ясности для тех, кто еще не в курсе:
'i' + 'nternationalizatio'.length + 'n';  // 'i18n'
'L' + 'ocalizatio'.length + 'n';          // 'L10n'

Всё-таки мне кажется, что для переводов важен контекст, поэтому переводить нужно всю шаблонизированную строку, а не отдельные её части.

Например: "${name}'s team" ("Vasya Pupkin's team") -> "Команда ${name}" ("Команда Васи Пупкина"), конечно, тут ещё проблема со склонением имён, но даже без проблемы склонения имён, порядок слов изменился.

Кроме того, часто нужен контекст (чтобы "name" в одних случаях переводилось как "имя", а в других — "наименование"), где можно было бы добавить в том числе и внешнюю информацию (пол {М/Ж}, число {единственное/множественное}, и тд и тп).
Я думаю на основе аргументов которые попадают в функцию, вполне можно провести подобный перевод :) Еще упустил момент, можно использовать например так:

bar()`Everything is ${desc}!`;

Допустим передать язык или формат:

lang('ru')`Everything is ${desc}!`;
lang('name', 'number')`${name}'s team is about ${count}`;
Такой вызов лично для меня выглядит ужасно, тем не менее, спасибо за демонстрацию такой возможности ES6. В своём проекте я бы такой синтаксис не использовал, а взял бы 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 учтено много нюансов, просто для комментария выбрал один из готовых примеров.
Спасибо за статью, интересно было почитать про TTL. А для локализации я для себя кроме gettext-совместимых решений пока что ничего не нашёл.
Спасибо автору! Статья пришлась очень к стати. Реализовал подобный функционал у себя в библиотеке (i18n-for-browser).
Sign up to leave a comment.

Articles