Łukasz Wesołowski

Łukasz Wesołowski Programista,
Gadu-Gadu S.A.

Temat: i18n w JavaScript

Witam,
Od jakiegoś czasu wciąż nie daje mi spokoju kwestia i18n w kontekście skryptów JS (w jaki sposób najrozsądniej zarządzać tłumaczeniami w JS-ie?).

Najprostszym sposobem jest "wrzucenie" wszystkich tłumaczeń do globalnego obiektu, przypisanie ich do odpowiednich namespace-ów:
var i18n =
{ user:
{
"phrase 1": "traslated phrase 1",
"phrase 2": "traslated phrase 2"
},
group:
{
"phrase 1": "traslated phrase 1",
"phrase 2": "traslated phrase 2"
}
}

a następnie w skrypcie odwoływanie się do nich w taki sposób:
i18n.user["phrase 1"] itd.

Można też dodać dodatkową warstwę i stworzyć globalnie dostępną funkcję __("phrase", "namespace"), która będzie korzystać z obiektu i18n i zwracać nam odpowiednie tłumaczenia w następujący
sposób: __("phrase 1", "user") itd.
Jeśli dodatkowo wykorzystamy js-owe closures i poszczególne namespacy-y ustawimy jako private to mamy pewność, że tylko __() będzie miała do nich dostęp i w przyszłości będzie można łatwo zmieniać zarówno reprezentację słownika, jak i miejsce jego składowania (na pliki xml lub cokolwiek innnego).

Mam więc do was pytanie w jaki sposób zarządzacie tłumaczeniami waszych skryptów. Chętnie poznam inne sposoby, bo na razie tylko te wyżej wymienione są w miarę rozsądne, co nie odznacza że nie można lepiej ;)Łukasz Wesołowski edytował(a) ten post dnia 03.01.09 o godzinie 16:32
Marcin Laber

Marcin Laber internet
technologies
magician

Temat: i18n w JavaScript

U siebie w nieco zawiły sposób:
- plik PHP z tłumaczeniem (tablica o strukturze ["tekst-oryginalny"] = "tekst-przetłumaczony")
- w skryptach PHP obiekt z funkcją _("tekst-do-przetłumaczenia")
- w JS pobranie poprzez XHR odpowiedniej wersji językowej jako tablica JS (najzwyklejsza konwersja tej samej tablicy z PHP) i również funkcja _("tekst-do-przetłumaczenia")
Łukasz Wesołowski

Łukasz Wesołowski Programista,
Gadu-Gadu S.A.

Temat: i18n w JavaScript

Czyli podobnie do mnie wrzucasz tłumaczenia do tablicy (obiektu) js-a i wyciągasz z niej za pomocą funkcji __().

Zastanawia mnie jednak "dociąganie" tłumaczeń poprzez XHR.
Rozumiem, że tłumaczenia wykorzystujesz również w skryptach PHP i nie chcesz przepisywać ich z tablicy w pliku PHP do tablicy w pliku JS. Jest w tym jednak pewien problem, a mianowicie nie dajesz szansy przeglądarce na z-cachowanie tych tłumaczeń przy pierwszym ich pobraniu (co ma miejsce w przypadku tłumaczeń w osobnym pliku js), tylko za każdym przeładowaniem strony wysyłasz zapytanie do serwera o te same tłumaczenia.
Być może nie opisałeś wszystkiego i masz jakąś optymalizację tych zapytań, ale jeśli nie to proponuje napisać sobie jakiś skrypt build-ujący, który automatycznie stworzy Ci odpowiedni plik .js na podstawie pliku .php. Nie będzie wówczas musiał przejmować się modyfikacją tłumaczeń w 2 miejscach, a tym samym wyeliminujesz XHR-a przy ładowaniu tłumaczeń.

Następna dyskusja:

JavaScript a programowanie ...




Wyślij zaproszenie do