Wielu zapewne z Was zastanawiało się w jaki sposób zrobić swoją stronę, lub danego cms’a wielojęzycznego, no i za pomocą przychodzi nam bardzo proste w obsłudze narzędzie na licencji GNU GPL, gettext, konfiguracja też jest banalnie prosta, ale że dziś do swoich narzędzi pracy, dorzuciłem to, więc postanowiłem się z Wam podzielić gotową klasą:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
/**
 * @li gnu/agpl v3 or leter
 * @code utf8
 * @version 0.1
 * @author cojack from Aichra.pl
 * @date 28.06.09
 *
 **/
 
final class Language
{
	private $_handler;
	private $_lang;
	private $_language = array ();
 
	public function __construct($lang, $hand)
	{
		$this->_lang = $lang;
		if ($hand == '')
			$this->_handler = 'index';
		else
			$this->_handler = $hand;
		$this->_language = array ('pl' => 'pl_PL', 'en' => 'en_US');
	}
 
	public function setLanguage()
	{
		setlocale(LC_MESSAGES, $this->_language[$this->_lang] . ".utf8",
													 $this->_language[$this->_lang] . ".UTF8",
                           $this->_language[$this->_lang] . ".utf-8",
                           $this->_language[$this->_lang] . ".UTF-8",
                           $this->_language[$this->_lang]
                           );
 
		bindtextdomain($this->_handler,'language');
 
		textdomain($this->_handler);
 
		bind_textdomain_codeset($this->_handler, 'UTF-8');
	}
 
}
?>

Jak możecie zauważyć mój każdy kod jest do siebie podobny, w prawie każdym jest jakiś handler. A to dlatego że buduję sobie narzędzie dzięki któremu będzie mi łatwiej później tworzyć strony, jak się ma ścieżka do lokalizacji pliku? A nijak bo plik i tak jest wykonywany z index.php więc ścieżka do dokumentów językowych jest to katalog w którym znajduję się index.php o nazwie: ‘language’ a w nim są odpowiednio katalogi językowe np pl a w nim dodatkowo jest jeszcze katalog LC_MESSAGES (taka struktura unixowa).

Jak utworzyć plik *.po ?

Żeby utworzyć ten plik musimy wpisać w konsoli (najlepiej w katalogu LC_MESSAGES bez znaczenia jaki jezyk)

xgettext -n /pelna/sciezka/do/naszego/pliku/php/z/funkcjami/tlumaczacymi/tekst.php

po wpisaniu wpiszemy ls i powinniśmy mieć plik: messages.po, do edycji ja używałem poedit, ale można i nano, kate etc.. tylko tyle że poedit zanast przekonwertuje plik do *.mo, nie wiem jak z konsoli przekonwertować do *.mo, ale pewnie manual wie ;) Można nie ruszony plik *.po przenieść do drugiego katalogu językowego, by mieć czysty dobry plik do tłumaczenia.

Parę słów na koniec.

Akurat używam tego wraz z smartami i pluginem dla smartów (google: smaryt + gettext 1 link).
Jak przechowuję adres? W Url, mógłbym pokazać swoją klasę do Routingu, ale jest tak prymitywna że aż wstyd, więc na razie nie ;) Dużo pracy mnie jeszcze czeka by to wszystko zaczęło mieć ręce i nogi.