Интернационализация с угловыми
Я подумываю о переносе моего сайта на angularjs, и я хочу начать очень мало, перемещая все мои статические серверные шаблоны с открытым текстом от django до angular (в противном случае возникнут проблемы с синтаксисом, {{}} ').
Кажется, что лучший способ сделать это будет одним из двух вариантов:
- Для вызова ajax, который возвращает JSON со всеми текстами моего сайта. Тексты будут сохранены в переменной, привязанной к моим HTML-элементам, поэтому angular обновит все.
- Чтобы сохранить статический файл js со словарем и включить его в мой HTML и связать словарь с угловыми символами.
Обе опции позволят мне переключаться между языками без перезагрузки страницы.
Какой из них лучше? В общем, это хороший подход или есть более правильный способ?
Ответы
Ответ 1
Прежде всего, есть способ изменить разделители angular на другие символы, как указано здесь: Angular Пользовательский разделитель JS
Опция 2. проще. Вы включаете его один раз, и у вас есть все переводы на загрузку страницы. Нет асинхронных вызовов, нет promises, приятно и легко.
И все же я бы пошел первым. Такие услуги, как $translate, действительно облегчат вашу жизнь после варианта 1. Кроме того, у него есть много вариантов загрузки и хранения загруженных данных в LocalStorage и куки, поэтому есть много места для расширения и настройки. Затем вы можете перевести свой контент с помощью услуги $translate, директивы или фильтра.
И не забывайте, что опция 2 отключает любые опции кэшированных запросов. При каждом запросе вашей стартовой страницы сервер должен прочитать статический файл и включить его в html. С первым вариантом пользовательский браузер может кэшировать .json столько, сколько захотите.
Ответ 2
Я опробовал несколько различных вариантов, в том числе Angular Translate, но мне понравилось Angular-gettext.
Одна вещь, которая очень помогла, заключается в том, что там есть рабочая демонстрация, где они i18n TodoMVC, называемые angular-gettext-example.
Рабочий процесс прост:
- Добавьте директиву "translate" к вашим шаблонам
- Запустите grunt, чтобы извлечь шаблон шаблона.
- Отправляйте свой дескриптор поставщику перевода или DIY с помощью POEdit или аналогичного программного обеспечения.
- Отбросьте файлы перевода .po обратно в свой проект
- Запустите grunt для компиляции файлов .po
- Задайте язык по умолчанию в своей области
- Посмотрите на волшебство!
Я уверен, что другие решения, размещенные здесь, также хороши, но я не видел сквозного примера, который хорошо организован как angular -gettext-example.
Cheers,
JD
Ответ 3
AngularJS поддерживает только il8n/L10n для фильтров только для валюты, даты и номеров. Согласно этой книге:
(извините за низкое качество камеры сотового телефона)
Я бы сказал, следуя первому подходу и динамически загружаю перевод. Это потребует много работы, но нет другого пути.
Ответ 4
Посмотрите angular-translate:)
Он решает оба сценария!