Jestem członkiem zespołu składającego się z ponad 20 programistów. Każdy programista pracuje nad osobnym modułem (około 10 modułów). W każdym module możemy mieć co najmniej 50 formularzy CRUD, co oznacza, że obecnie mamy blisko 500 przycisków dodawania , zapisywania , edycji itp.
Ponieważ jednak chcemy zglobalizować naszą aplikację, musimy mieć możliwość tłumaczenia tekstów w naszej aplikacji. Na przykład wszędzie słowo add powinno stać się ajouterem dla francuskich użytkowników.
To, co zrobiliśmy do tej pory, to to, że dla każdego widoku w interfejsie użytkownika lub warstwie prezentacji mamy słownik par klucz / wartość w tłumaczeniach. Następnie podczas renderowania widoku tłumaczymy wymagane teksty i napisy za pomocą tego słownika. Jednak to podejście, doszliśmy do około 500 dodatków w 500 słownikach. Oznacza to, że złamaliśmy zasadę DRY.
Z drugiej strony, jeśli scentralizujemy typowe ciągi znaków, na przykład umieszczając add w jednym miejscu, i poprosimy programistów, aby używali go wszędzie, napotkamy problem braku pewności, czy ciąg jest już zdefiniowany w scentralizowanym słowniku, czy nie.
Inną opcją może być brak słownika tłumaczeń i korzystanie z usług tłumaczeniowych online, takich jak Tłumacz Google, Tłumacz Bing itp.
Innym problemem, który napotkaliśmy, jest to, że niektórzy programiści pod presją dostarczenia projektu na czas nie pamiętają kluczy tłumaczenia . Na przykład w przypadku tekstu przycisku dodawania programista użył dodania, podczas gdy inny programista użył nowego itp.
Jaka jest najlepsza lub najbardziej znana metoda globalizacji i lokalizacji zasobów ciągów aplikacji?
Odpowiedzi:
O ile wiem,
localeplanet
w JavaScript istnieje dobra biblioteka o nazwie Localization and Internationalization. Ponadto uważam, że jest natywny i nie ma żadnych zależności od innych bibliotek (np. JQuery)Oto strona biblioteki: http://www.localeplanet.com/
Spójrz również na ten artykuł Mozilli, możesz znaleźć bardzo dobrą metodę i algorytmy tłumaczenia po stronie klienta: http://blog.mozilla.org/webdev/2011/10/06/i18njs-internationalize-your-javascript-with- a-little-help-from-json-and-the-server /
Wspólnym elementem wszystkich tych artykułów / bibliotek jest to, że używają
i18n
klasy iget
metody (w pewnym sensie również określających obszar mniejszy nazwę funkcji podobnego_
) do pobierania / konwersjikey
dovalue
. W moim wyjaśnieniukey
oznacza, że łańcuch, który chcesz przetłumaczyć, ivalue
oznacza przetłumaczony ciąg.Następnie potrzebujesz tylko dokumentu JSON do przechowywania plików
key
„ivalue
”.Na przykład:
A tutaj JSON:
Uważam, że korzystanie z aktualnych, popularnych rozwiązań bibliotecznych jest dobrym podejściem.
źródło
Uważam, że istnieje już wiele rozwiązań tego problemu w językach po stronie serwera, takich jak ASP.Net/C#.
Przedstawiłem kilka głównych aspektów problemu
Problem : musimy załadować dane tylko dla żądanego języka
Rozwiązanie : W tym celu zapisujemy dane w osobnych plikach dla każdego języka
dawny. res.de.js, res.fr.js, res.en.js, res.js (dla języka domyślnego)
Problem: pliki zasobów dla każdej strony powinny być oddzielone, abyśmy otrzymali tylko potrzebne dane
Rozwiązanie : Możemy użyć niektórych narzędzi, które już istnieją, takich jak https://github.com/rgrove/lazyload
Problem: potrzebujemy struktury par klucz / wartość, aby zapisać nasze dane
Rozwiązanie : sugeruję obiekt javascript zamiast string / string air. Możemy czerpać korzyści z inteligencji w IDE
Problem: Członkowie generalni powinni być przechowywani w pliku publicznym, a wszystkie strony powinny mieć do nich dostęp
Rozwiązanie : w tym celu tworzę folder w katalogu głównym aplikacji internetowej o nazwie Global_Resources i folder do przechowywania pliku globalnego dla każdego podfolderów, które nazwaliśmy „Local_Resources”
Problem: każdy członek podsystemu / podfolderu / modułu powinien zastąpić elementy członkowskie Global_Resources w swoim zakresie
Rozwiązanie : rozważałem plik dla każdego
Struktura aplikacji
Odpowiedni kod dla plików:
Global_Resources / default.js
Global_Resources / default.fr.js
Plik zasobów dla żądanego języka powinien zostać załadowany na stronie wybranej z Global_Resource - powinien to być pierwszy plik ładowany na wszystkich stronach.
UserManagementSystem / Local_Resources / default.js
UserManagementSystem / Local_Resources / default.fr.js
UserManagementSystem / Local_Resources / createUser.js
UserManagementSystem / Local_Resources / createUser.fr.js
plik manager.js (ten plik powinien być ładowany jako ostatni)
Mam nadzieję, że to pomoże :)
źródło
"Create" : {"message": "Create", "description": "text on the button that opens the editor with a blank Foo"}
jak na przykład dla lokalizacji rozszerzeń Chrome . Lub utwórz oddzielny plik zawierający te komentarze.jQuery.i18n to lekka wtyczka jQuery umożliwiająca umiędzynarodowienie stron internetowych. Umożliwia pakowanie niestandardowych ciągów zasobów w plikach „.properties”, podobnie jak w pakietach zasobów Java. Ładuje i analizuje pakiety zasobów (.properties) na podstawie dostarczonego języka lub języka zgłaszanego przez przeglądarkę.
aby dowiedzieć się więcej na ten temat, zajrzyj do artykułu Jak umiędzynarodowić swoje strony za pomocą JQuery?
źródło