2009-07-28 8 views
5

Zawsze słyszałam o gettext - wiem, że jest to pewnego rodzaju polecenie unix do wyszukiwania tłumaczenia na podstawie podanego argumentu, a następnie tworzy plik .pot, ale czy ktoś może mi wyjaśnić w kategoriach laika, jak to się robi? w ramach sieci?Dodawanie obsługi i18n w PHP z gettext?

Może uda mi się obejść, jak to zrobiło pewne ustalone ramy, ale wyjaśnienie laika pomogłoby, ponieważ mogłoby tylko pomóc w wyczyszczeniu obrazu, zanim zacznę zagłębiać się w rzeczy, by zapewnić własne rozwiązanie.

Odpowiedz

12

System gettext odtwarza ciągi z zestawu plików binarnych, które są tworzone z plików tekstowych źródłowych, zawierających tłumaczenia w różnych językach dla tego samego zdania.

Klawisz wyszukiwania to zdanie w języku "podstawowym".

w kodzie źródłowym trzeba będzie coś podobnego

echo _("Hello, world!"); 

dla każdego języka będzie mieć odpowiedni plik tekstowy z kluczem i wersji przetłumaczonej (uwaga% s, które mogą być używane z funkcji printf)

french 
msgid "Hello, world!" 
msgstr "Salut, monde!" 
msgid "My name is %s" 
msgstr "Mon nom est %s" 

italian 
msgid "Hello, world!" 
msgstr "Ciao, mondo!" 
msgid "My name is %s" 
msgstr "Il mio nome è %s" 

są to główne etapy, które trzeba przejść do tworzenia lokalizacje

  • wszystkie swoje wyjście tekst musi używać funkcji gettext (gettext(), ngettext() _())
  • użycie xgettext (* nix) do analizowania plików php i utworzyć plik tekstowy baza .po
  • do użytku poedit dodaj tłumaczenie tekstów do plików .po
  • użytkowania msgfmt (* nix), aby utworzyć plik binarny .mo z pliku .po
  • umieścić .mo pliki w strukturze katalogów jak

locale/de_DE/LC_MESSAGES/myPHPApp.mo

locale/en_EN/LC_MESSAGES/myPHPApp.mo

locale/it_IT/LC_MESSAGES/myPHPApp.mo

wtedy skrypt php musi ustawić ustawienia regionalne, które muszą być stosowane

przykładzie z php instrukcja jest bardzo jasne dla tej części

<?php 
// Set language to German 
setlocale(LC_ALL, 'de_DE'); 

// Specify location of translation tables 
bindtextdomain("myPHPApp", "./locale"); 

// Choose domain 
textdomain("myPHPApp"); 

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now 

// Print a test message 
echo gettext("Welcome to My PHP Application"); 

// Or use the alias _() for gettext() 
echo _("Have a nice day"); 
?> 

Zawsze z podręcznika php wyglądać here dobrego tutoriala

+0

ale przede Przykładowy podręcznik PHP nie wydaje się tłumaczyć podanego ciągu. Czy jest coś innego do zrobienia z tym przykładem? –