13

Buduję aplikację przy użyciu najnowszego Angular5 i potrzebuję, aby użytkownik mógł zmieniać języki. Nigdy nie musiałem implementować tego w Angular2 + (faktycznie używam Angular5).Angular 5 internacjonalizacja

muszę ustawić tłumaczenia w dwóch miejscach:

  • komponentowyg za szablon html - etykiety zmiana w określonym języku
  • W kodu w pliku component.ts - może muszę tłumaczyć pewne ciągów są budowane dynamicznie w określonych warunkach w kodzie

Szukałem ngx-translation i wygląda na to, aby zrobić wszystko, czego potrzebuję, ponieważ w nim można zmienić język bez odbudowy kodu, patrz here. Jednak przeczytałem it was probably going to be deprecated ze względu na to, że główny programista przeniósł się do zespołu kątowego, aby rozwinąć swój kod i18n.

Rozumiem również, że obecny numer i18n nie obsługuje wszystkiego, co jest mi potrzebne, patrz: here.

Moje pytanie - jaki jest aktualny stan tłumaczeń w najnowszej wersji Angular? Czy istnieją inne biblioteki, które ludzie poleciliby zamiast tego, jeśli w rzeczywistości Angular nie ma jeszcze pełnego wsparcia (na zmianę języka bez rekompilacji)? Czy ngx-translate jest dobry na przyszłość?

Wszelkie wskazówki w tym zakresie są bardzo cenne!

Odpowiedz

21

Po spędzać czas patrząc na to, pomyślałem, że pisać główne różnice między ngx-translate znalazłem i Angular-i18n:

  • kątowe działa tylko z jednego języka na czas, musisz całkowicie przeładować aplikację, aby zmienić język. Obsługa JIT oznacza tylko, że działa z JIT, ale nadal musisz dostarczać tłumaczenia podczas bootstrap, ponieważ zastąpi tekst w twoich szablonach podczas kompilacji, podczas gdy ta lib używa powiązań, co oznacza, że ​​możesz w dowolnej chwili zmienić tłumaczenia . Minusem jest to, że wiązania zabierają pamięć, więc sposób Angulara jest bardziej wydajny. Ale jeśli użyjesz OnPush do swoich komponentów prawdopodobnie nigdy nie zauważysz różnicy
  • Angular obsługuje tylko używanie i18n w twoich szablonach, teraz pracuję nad funkcją, która pozwoli ci użyć jej w kodzie, ale nadal jest Praca w toku. Ta biblioteka działa zarówno w kodzie, jak i szablonach Angular obsługuje albo XLIFF, albo XMB (oba są formatami XML), podczas gdy ta lib obsługuje domyślnie JSON, ale możesz napisać własny program ładujący, aby obsługiwać dowolny format, który chcesz (jest to program ładujący dla Pliki PO na przykład). Osobiście pliki Json są dość proste do przeczytania, a nie te inne formaty, ale to nie jest ogromna wada.
  • kątowe obsługuje wyrażenia ICU (liczba mnoga i wybierz), ale ta biblioteka nie
  • kątowe obsługuje zastępcze html tym kodem kątowym, natomiast biblioteka ta obsługuje tylko regularne html (ponieważ jest wykonywany w czasie wykonywania, a nie w czasie kompilacji, a nie ma kompilacji $ w Angular, jak było w AngularJS)
  • Interfejs API tej biblioteki jest pełniejszy, ponieważ jest wykonywany w czasie wykonywania, może oferować więcej rzeczy (obserwowalne, zdarzenia, ...), których Angular nie ma (ale tak naprawdę nie trzeba, ponieważ nie można zmienić tłumaczeń) Twórca ngx-translate powiedział:

Ocombe (deweloper NGX): @josersleal to jest dokładnie to, co zrobili, kątowa zespół zatrudnił mnie poprawić i18n dla wszystkich, ale nie ma sposób zintegrować mój lib bezpośrednio do rdzenia, po przepracowaniu 3 miesiące dla podstawowego zespołu mogę ci powiedzieć, że Angular i18n jest znacznie bardziej złożony i rozbudowany niż moja libacja. Obsługuje wiele bardziej skomplikowanych rzeczy, takich jak i robi to bez wszystkich błędów i niedociągnięć, które ma moja biblioteka . Rozumiem, że to frustrujące, że rdzeń nie rozwija się tak szybko, jak to, co może zrobić biblioteka, ale są powody, dla których to, i że nie można zaimplementować czegoś i zmienić go za każdym razem, gdy widzisz, że zapomniałeś uwzględnić przypadek użycia. Wszystko musi być dokładnie zaplanowane i przemyślane. Mimo to, będziesz mieć większość rzeczy, które ta biblioteka może zrobić w rdzeniu w przyszłości, ale może minąć rok, zanim dotrzemy tam niestety. Dobrą wiadomością jest to, że będzie znacznie lepiej niż moja naiwna implementacja .

To jest dobry artykuł, aby omówić główne różnice pomiędzy NGX-translate i kątowych za i18n: https://github.com/ngx-translate/core/issues/495

Zmiany spowodowane są dla i18n w wersji 6 kanciasty. Dzisiaj jesteśmy obecnie w wersji 5:

Niektóre myśli ...

  • Angular-i18n jest bardziej wydajny, gdy kompilujesz aplikację w języku, którego potrzebujesz (zamiast tłumaczeń występujących w czasie wykonywania). Może również stanowić wadę, ponieważ może być konieczne posiadanie wielu wersji aplikacji w różnych językach.
  • Gdybyśmy używali SEO, kątowy i18n byłby drogą do przodu, ze względu na przeglądanie adresów URL. W moim przypadku wcale tego nie potrzebuję.
  • Jeśli potrzebujemy wielu przełączeń itp.Ponownie, nie potrzebuję tego - potrzebuję dość prostego przełącznika języka uruchomieniowego w szablonach i kodzie.
  • Angular-i18n nie zostanie zwolniony przynajmniej do marca 2018 roku. Dla mnie nie mogę się doczekać, aż będę musiał teraz zbudować moją aplikację.
  • ngx-translate nie będzie miał tak obszernego zestawu możliwości, jak kątowe-i18n. ALE potrzebuję tylko prostych tłumaczeń wykonawczych, więc myślę, że jest w porządku dla tego, czego potrzebujemy.
  • ngx-translate jest open source i nadchodzi w dniu, w którym nie jest już rozwijany, jeśli jest poważny problem, myślę, że mógłbym się naprawić (mam nadzieję, że do czasu, który nadejdzie, wszelkie problemy, które mogą się pojawić zostaną usunięte).

Jestem również będzie musiał zapoznać się z biblioteką kątowa-l10n jak to wygląda bardzo dobrze:

1

Tak. ngx-translate jest dobry do tej pory i mam nadzieję, że będzie również w przyszłości.

Używam ngx-translate w moim bieżącym projekcie Angular 5 z 5 językami.

Dla mnie działa dobrze. Nie musiałem wprowadzać żadnych niestandardowych zmian, działało jak plug and play.

użyłem tej wtyczki https://github.com/ngx-translate/core

+0

Hmm - tak, zgodził ngx- Tłumaczenie jest świetne! ALE liczyłem na coś nieco mocniejszego niż "mam nadzieję, że będzie w przyszłości" ;-) ponieważ muszę to dzisiaj wprowadzić –

+1

Haha, mam to zaimplementowane i działa miło :) –