Internacjonalizacja z angularjs

Myślę o przeniesieniu mojej strony do angularjs i chcę zacząć od małego, przenosząc wszystkie moje statyczne szablony tekstowe po stronie serwera z django do angular(w przeciwnym razie będą problemy ze składnią z' {{}}').

Wydaje się, że najlepszym sposobem na to będzie jedna z dwóch opcji:

  1. aby mieć wywołanie ajax, które zwraca JSON ze wszystkimi tekstami mojej strony. Teksty będą przechowywane w zmiennej, która jest powiązana z moimi elementami HTML, więc angular będzie aktualizować wszystko.
  2. aby zapisać statyczny plik js ze słownikiem i umieścić go w moim HTML i powiązać słownik z angularjs.

Obie opcje pozwolą mi przełączać się między językami bez przeładowywania strony.

Który jest lepszy? Ogólnie rzecz biorąc, czy jest to dobre podejście, czy jest bardziej poprawny sposób?

Author: Uri, 2013-07-10

4 answers

Po pierwsze, istnieje sposób na zmianę ograniczników kątowych na inne symbole, jak wyjaśniono tutaj: Angular JS custom delimiter

2. opcja jest łatwiejsza. Dołączasz go raz i masz wszystkie tłumaczenia na ładowanie strony. Bez asynchronicznych połączeń, bez obietnic, spokojnie.

A jednak wybrałbym pierwszą. Usługi takie jak $ translate naprawdę ułatwią Ci życie po opcji 1. Dodatkowo posiada wiele opcji ładowania i przechowywania załadowanych danych w LocalStorage i cookies, więc jest dużo miejsca na rozszerzenie i dostosowanie. Następnie możesz przetłumaczyć swoją zawartość za pomocą usługi $ translate, dyrektywy lub filtra.

I nie zapominaj, że opcja 2 wyłącza wszystkie opcje buforowanych żądań. Przy każdym żądaniu do strony startowej serwer musi odczytać plik statyczny i umieścić go w html. Przy pierwszej opcji przeglądarka użytkownika może buforować .json tak długo, jak chcesz.

 9
Author: package,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:39

Wypróbowałem kilka różnych opcji, w tym Angular Translate, ale jak dotąd najbardziej podobał mi się Angular-gettext .

Jedna rzecz, która ogromnie pomogła, to to, że istnieje działające demo, w którym i18n TodoMVC nazywa się angular-gettext-example .

Przepływ pracy jest prosty:

  1. Dodaj dyrektywę "translate" do szablonów
  2. Uruchom grunt do wydobycia .pot template(S)
  3. [[11]]pot do dostawcy tłumaczenia lub DIY z POEdit lub podobnym oprogramowaniem
  4. Rzuć .pliki tłumaczeń po z powrotem do twojego projektu
  5. Uruchom grunt, aby skompilować .pliki po
  6. Ustaw domyślny język w swoim zakresie
  7. uważaj na magię!

Jestem pewien, że inne rozwiązania zamieszczone tutaj są również dobre, ale nie widziałem tak dobrze zorganizowanego przykładu end-to-end, jak angular-gettext-example.

Cheers, JD

 33
Author: JD Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 18:08:05

AngularJS obsługuje il8n/L10n tylko dla filtrów waluty, daty i liczb. Według tej książki :

Book-shot!(Przepraszam za niską jakość! telefon komórkowy aparat)

Powiedziałbym, postępuj zgodnie z pierwszym podejściem i załaduj tłumaczenie dynamicznie. To wymagałoby dużo pracy, ale nie ma innego wyjścia

 4
Author: Ahmad Alfy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-10 06:58:54

Spójrz na angular-translate :)

Rozwiązuje oba scenariusze!

 4
Author: Pascal Precht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 13:14:21