Jest to modyfikacja istniejącej strony, która ma ją już zaaplikowaną na zasadzie tablicy PHP:
$lang['ciąg'] = 'Tłumaczenie';
Każda tablica w oddzielnym pliku i w zależności od wczytanego języka dany plik jest includowany.
Na dobrą sprawę mógłbym zostawić tę metodę (chyba najpopularniejszą), ale wg mnie nie jest ona praktyczna:
- w kodzie widzimy nic nie mówiące <?= $lang['ab123'] ;?>
- nowe zdanie czy słowo wymaga edycji X plików, gdzie X to liczba języków
- źle obsługuje brak tłumaczenie dla danego języka (np. wyrażenie, która nie wymaga tłumaczenia)
Napisałem coś własnego na podstawie tablicy wielowymiarowej co pozwala na pominięcie całego tłumaczenia czy tylko danego języka.
Gdy nie znajdzie tłumaczenia wyświetla tekst domyślnie wprowadzony (wzorowałem się troszkę gettext).
function lg ($str) { /* default lang */ $default = 'pl'; /* ciasteczka, sesje.. nm.. */ $lang = 'ru'; foreach ($arr as $key => $translations) { if ($translations[$default] == $str) { $str = $translations[$lang]; } break; } } } lg ( 'Jacek ma kota' );
Działa prosto, a zarazem bardziej intuicyjnie.
Zastanawia mnie tylko kwestia optymalności.
Może ktoś to rozwiązał w inny sposób?
Może pliki XML (bazę pomijam, to strona typu "wizytówka" bez bazy danych)?
Wcześniejszy pomysł opierał się na używaniu indeksów do wyszukiwania fraz:
$arr['ala_ma_kota'] = [ tablica z tłumaczeniami ]
ale tutaj zastanawia mnie kwestia tego ile znaków można wpakować w indeks no i wygląda to troszkę irracjonalnie.