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:
- 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.
- 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?
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.
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:
- Dodaj dyrektywę "translate" do szablonów
- Uruchom grunt do wydobycia .pot template(S) [[11]]pot do dostawcy tłumaczenia lub DIY z POEdit lub podobnym oprogramowaniem
- Rzuć .pliki tłumaczeń po z powrotem do twojego projektu
- Uruchom grunt, aby skompilować .pliki po
- Ustaw domyślny język w swoim zakresie
- 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
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 :
(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
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!
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