Lekcja 10 - pliki językowe

Kategoria: Kurs pisania komponentów dla Joomla 1.5 [MVC] Utworzono: czwartek, 02, październik 2008 Opublikowano: czwartek, 02, październik 2008 Wojciech Romanek Drukuj E-mail

Kiedy już stworzymy coś konkretnego co uważamy, że można by pokazać większej liczbie osób warto pomyśleć również o użytkownikach którzy nie mówią po naszemu. Na szczęście Joomla udostępnia nam specjalne klasy dzięki którym w bardzo wygodny sposób jesteśmy w stanie przetłumaczyć nasz komponent.

Zacząć należy od tego że wszystkie pliki językowe są umiejscowione w dwóch katalogach. Jak zapewne się domyślasz jeden z katalogów jest odpowiedzialny za stronę frontową naszego komponentu, drugi za administracyjną. Są to kolejno katalogi: /language oraz /administrator/language w katalogach tych znaleźć można podkatalogi o nazwach en-GB, pl-PL lub inne. Nazwy katalogów są tworzone na podstawie specyfikacji RFC 3066. Ogólna zasada to język-REGION. Osobom bardziej zainteresowanych tematem polecam lekturę powyżej wspomnianego dokumentu oraz może bardziej czytelnych artykułów traktujących o tagach identyfikujących języki.

Nazwa pliku językowego powinna być następująca: pl-PL.com_nazwakomponentu.ini oczywiście dla każdego języka plik ma zmieniony na początku symbol nazwy języka. Zawartość przykładowego pliku językowego (powiedzmy że dla języka angielskiego – plik nazwiemy en-GB.com_witaj.ini) mogłaby być następująca:

# English translation for com_witaj component:)
#Author: Wojciech Romanek
#p.s. to jest komentarz;P
 
YES=Yes
NO=No
SETTINGS=Settings
APPLY=Apply
SAVE=Save
WELCOME=Welcome to my website ;)

Myślę że patrząc na ten przykład domyślasz się o co chodzi... Nie ma jakiejś specyfikacji w jaki sposób mają wyglądać słowa po lewej stronie ale ważne jest to aby odzwierciedlały treść danego tłumaczenia. Tak zapisany plik kopiujemy do odpowiedniego katalogu z plikami językowymi (jeśli nie robimy instalatora). Aby teraz użyć nasze pliki językowe w komponencie musimy na początku je załadować. Dlatego w konstruktorze ( function __construct() ) naszego kontrolera dodajemy następujący kod:

$language =& JFactory::getLanguage();
$language->load('com_witaj');

Teraz do wyświetlenia naszego tłumaczenia możemy użyć trzech metod z klasy JText najczęściej na pewno będzie stosowana metoda _() przyjmuje ona jeden argument – wyraz do przetłumaczenia. Dla przykładu:

JText::_('YES');

wyświetli nam tłumaczenie słowa YES załadowanego języka. Jeśli nie będzie dostępne tłumaczenie tego słowa to zostanie wyświetlony wyraz podany jako argument. Kolejne dwie metody to: sprintf() oraz printf(). Obie funkcje działają prawie tak samo mianowicie pobierają dowolną ilość argumentów, pierwszy to tekst do przetworzenia a kolejne to zmienne które mają zostać „wplecione” w tekst. np. dla tłumaczenia (tym razem język polski):

PRICE_OF_ITEM=%s kosztuje %f %s

Wywołując metodę:

JText::sprintf('jabłko', 0.59, 'zł');

zostanie wyświetlony tekst: „jabłko kosztuje 0.59zł” wspomniałem że sprintf() oraz printf() działają podobnie, różnica polega na tym że printf() zwraca długość przetłumaczonego i przetworzonego tekstu. Teoretycznie w powyższym przykładzie powinien zwrócić wartość 22 jednak nie testowałem tej funkcji nigdy ponieważ mi nie była potrzebna. Symbole %s %f %d itd. stosuje się takie same jak w PHP nie ma tutaj różnic.

Ważna rzecz o której nie wspomniałem – każdy plik tekstowy zawierający tłumaczenie musi być zapisany w kodowaniu UTF-8. To samo tyczy się plików z kodem więc lepiej się tego trzymaj aby uniknąć późniejszych kłopotów!

Została chyba ostatnia sprawa dodanie informacji o pliku językowym do paczki instalacyjnej. Aby instalator wiedział o tym że w paczce znajdują się pliki językowe należy go o tym poinformować dodając odpowiednie linie do manifestfile. W sekcji frontowej po wylistowaniu plików należy dodać:

<languages folder="site">
	<language tag="pl-PL">pl-PL.com_witaj.ini</language>
</languages>

a dla backendu po wylistowaniu plików przed tagiem zamykającym </administration>

<languages folder="admin">
	<language tag="pl-PL">pl-PL.com_witaj.ini</language>
	<language tag="en-GB">en-GB.com_witaj.ini</language>
</languages>

Oczywiście pliki językowe muszę być umiejscowione w folderze podanym jako atrybut znacznika languages! To by pewnie było na tyle jeśli chodzi o tłumaczenia komponentów... Jeśli o czymś zapomniałem to na pewno sam lub z czyjąś pomocą sobie przypomnę i na pewno to opiszę! Demonstrację działania plików językowych możesz zobaczyć w Czysty komponent do Joomla 1.5 który możesz pobrać z mojej plikowni.

Odsłony: 7555