Symfony – Wersje językowe strony – Tłumaczenie interfejsu

Tworząc serwis internetowy w symfony w wersji conajmniej dwujęzycznej mamy bardzo uproszczone zadanie.

Cały proces tłumaczenia można zgrubnie podzielić na dwa etapy:

  • Tłumaczenie interfejsu
  • Tłumaczenie treści, tej generowanej z panelu admina

O ile ten drugi wymaga dużego wkładu pracy związanego z samym tworzeniem wielojęzycznej treści (zawsze można się wspomóc google transalte, choć ten ma się podobno stać płatnym w najbliższym czasie…) oraz z odpowiednim przygotowaniem systemu bazy danych (czyli modelu), o tyle samo tłumaczenie części zawartej na „sztywno” w samym szablonie jest dziecinnie proste :)Musimy tylko pamiętać, by elementy dodawane do szablonu „oprawiać” w odpowiednie znaczniki, np:

<div class="nazwa_listy">Ważne</div>

Po oprawie powinny wyglądać tak:

<div><?php echo __("Ważne); ?></div>

Jak widać kluczowym elementem jest znaczki, a właściwie helper __() odpowiedzialny za tłumaczenie interfejsu.

Samo budowanie interfejsu wielojęzycznego jak widać jest naprawdę proste.
Teraz musimy wygenerować pliki tłumaczenia dla każdej wersji językowej jaką chcemy mieć. Z pomocą przychodzi nam samo symfony.
Poniższym poleceniem tworzymy pliki odpowiedzialne za tłumaczenie interfejsu na język angielski:

php symfony i18n:extract frontend en --auto-save

Polecenie to stworzy nam nowy katalog w gałęzi struktury serwisu apps/frontend/i18n/en/messages.xml
wyglądający mniej więcej tak jak poniżej, w zależności od budowy naszego serwisu :)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
 <file source-language="EN" target-language="en" datatype="plaintext" original="messages" date="2011-07-07T20:53:07Z" product-name="messages">
 <header/>
 <body>
<trans-unit id="1">
 <source>Wykonanie</source>
 <target>Created by</target>
 </trans-unit>
 <trans-unit id="2">
 <source>projekt graficzny</source>
 <target>Graphics</target>
 </trans-unit>
 <trans-unit id="3">
 <source>programowanie</source>
 <target>programming</target>
 </trans-unit>
 <trans-unit id="4">
 <source>Zaloguj się</source>
 <target>Login</target>
 </trans-unit>
 <trans-unit id="5">
 <source>Wyloguj się</source>
 <target>Logout</target>
 </trans-unit>
 </body>
 </file>
</xliff>

Teraz jeszcze w odpowiedni sposób musimy potraktować nasz plik ustawień tłumaczonej aplikacji…
W moim przypadku aplikacja nazywa się po prostu frontend a plik z ustawieniami to oczywiście settings.yml znajdujący się w w drzewie /apps/frontend/config/settings.yml
Wpis odpowiedzialny za tłumaczenie interfejsu to :

all:
  .settings:
     i18n:                   on
     standard_helpers: [ Partial, Cache, I18N ]
    default_culture: pl_PL

gdzie:

i18n: on -> włącza nam tłumaczenie interfejsu, właściwie całego serwisu a jeszcze bardziej szczegółowo to tłumaczenie danej aplikacji
standard_helpers: [ Partial, Cache, I18N ] -> pozwala nam korzystać ze znacznika helpera __() koniecznego do tłumaczenia interfejsu
default_culture: pl_PL -> ustawienie zmiennej culture na język polski

To na tyle, następnym razem postaram się  zaprezentować tłumaczenie danych pochodzących z DB…

Leave a Reply