Angular 5 интернационализация

Я создаю приложение, используя последнюю версию Angular5, и мне нужно, чтобы пользователь мог переключать языки. Мне никогда не приходилось реализовывать это в Angular2 + (фактически я использую Angular5).

Мне нужно установить переводы в двух местах:

  • Компонентный шаблон html - смена ярлыков на указанный язык
  • В коде в файле component.ts - мне может понадобиться перевести некоторые строки, которые динамически строятся при определенных условиях в коде

Я смотрел ngx-translation, и он пытается сделать все, что мне нужно, так как в нем вы можете менять язык без перестройки кода, см. здесь. Однако я прочитал вероятно, это было бы устаревшим из-за того, что главный разработчик перешел в команду angular для разработки своего кода i18n.

Я также понимаю, что текущий i18n не поддерживает все, что мне нужно прямо сейчас, см. здесь.

Мой вопрос - каково состояние игры для переводов в последней версии Angular? Будут ли другие библиотеки, которые рекомендуют люди, а если действительно, angular сам еще не получил полной поддержки (для изменения языка без перекомпиляции)? Является ли ngx-translate хорошим для будущего?

Любое руководство в этой области очень ценится!

Ответ 1

Проведя время, изучая это, я подумал, что опубликую основные различия, которые я нашел между ngx-translate и Angular -i18n:

  • Angular работает только с одним языком за раз, вам нужно полностью перезагрузить приложение, чтобы изменить lang. Поддержка JIT означает, что она работает с JIT, но вам все равно нужно предоставить переводы при загрузке, потому что она заменит текст в ваших шаблонах во время компиляции, тогда как эта библиотека использует привязки, а это означает, что вы можете изменить перевод в любое время, Недостатком является то, что привязки занимают память, поэтому способ Angular более эффективен. Но если вы используете OnPush для своих компонентов, вы, вероятно, никогда не заметите разницу
  • Angular только поддерживает использование i18n в ваших шаблонах, я работаю над функцией, которая позволит вам использовать ее в вашем коде, но она все еще работает. Эта библиотека работает как в коде, так и в шаблонах
  • Angular поддерживает либо XLIFF, либо XMB (оба являются форматами XML), тогда как эта lib поддерживает JSON по умолчанию, но вы можете написать свой собственный загрузчик для поддержки любого формата, который вы хотите (например, загрузчик для файлов PO). Лично Json файлы довольно прямо читаются, а не другие форматы, но это не огромный недостаток.
  • Angular поддерживает выражения ICU (множественное число и выбор), но эта библиотека не
  • Angular поддерживает html-заполнители, включая Angular код, тогда как эта библиотека поддерживает только обычный html (потому что он выполняется во время выполнения, а не во время компиляции, и нет компиляции $в Angular, как это было в AngularJS)
  • API этой библиотеки более полно, поскольку он выполняется во время выполнения, он может предлагать больше вещей (наблюдаемые, события,...), которые Angular не имеет (но на самом деле не нуждается в том, что вы не можете изменить перевод) Создатель ngx-translate сказал следующее:

Ocombe (разработчик ngx): @josersleal, что именно то, что они сделали, команда Angular наняла меня, чтобы улучшить i18n для всех. Но нет способ интегрировать мой lib непосредственно в ядро, после работы в течение 3 месяцев для основной команды, я могу сказать вам, что Angular i18n намного больше сложный и сложный, чем мой lib. Он обрабатывает гораздо более сложные и он делает это без всех ошибок и недостатков, которые мои lib имеет. Я понимаю, что это расстраивает то, что ядро ​​не развиваться так же быстро, как то, что может сделать библиотека, но есть причины для это, и первое, что вы не можете что-то реализовать и измените его, когда увидите, что вы забыли включить прецедент. Все должно быть тщательно спланировано и продуманно. Тем не менее, вы имеют большинство вещей, которые эта библиотека может делать в ядре в но это может занять год, прежде чем мы доберемся до конца. Хорошей новостью является то, что это будет намного лучше, чем моя наивная реализация.

Это хорошая статья, чтобы обсудить основные различия между ngx-translate и Angular s i18n: https://github.com/ngx-translate/core/issues/495

Изменения для i18n должны появиться в версии 6 из angular. Сегодня мы в настоящее время на версии 5:

Некоторые мысли...

  • Angular -i18n более эффективен при компиляции вашего приложения на требуемом вами языке (а не в переводе, выполняемом во время выполнения). Также может быть недостатком, поскольку вам может потребоваться несколько сборок вашего приложения на разных языках.
  • Если бы мы использовали SEO, angular -i18n - это путь вперед, из-за просмотра URL-адресов. Для моего случая мне это совсем не нужно.
  • Если нам требуется множественное переключение и т.д. Опять же, мне это не нужно - мне просто нужен довольно простой язык языка исполнения в шаблонах и коде.
  • Angular -i18n не будет выпущен до марта 2018 года. Для меня я не могу дождаться, пока мне нужно создать свое приложение.
  • ngx-translate не будет иметь исчерпывающий набор возможностей как angular -i18n, но опять же, мне нужны только простые переводы времени выполнения, поэтому подумайте, что это хорошо для того, что нам нужно.
  • ngx-translate - это с открытым исходным кодом, и на этот день его больше не разрабатывают, если есть серьезная проблема, я думаю, что я мог бы исправить себя (надеюсь, к тому времени, когда это произойдет, любые проблемы, которые могут возникнуть, будут устранены).

Я также посмотрю на библиотеку angular -l10n, поскольку она выглядит очень хорошо:

Ответ 2

Да. ngx-translate хорош до сих пор, и я надеюсь, что это будет и в будущем.

Я использую ngx-translate в моем текущем проекте Angular 5 с 5 + языками.

Он работает для меня до сих пор. Мне не нужно было вносить какие-либо пользовательские изменения, это работало как функция plug and play.

Я использовал этот плагин https://github.com/ngx-translate/core