Ja jak już się czymś takim bawię, to zawsze robię wykrywanie języka w 3 krokach:
1. Jeżeli użytkownik ma cookie/sesje z ustawionym językiem - to ten jeżyk mu ustawiam (najwyższy priorytet)
2. Jeżeli użytkownik nie ma cookie/sesji z ustawionym językiem - odczytuje z przeglądarki HTTP_ACCEPT_LANGUAGE biorę pierwszy język i jeśli takowy obsługuje ustawiam go w sesji/cookie
3. Jeżeli ani 1 ani 2 nie jest spełnione ustawiam język domyślny (np. angielski)
Jeżeli user wybiera język klikając na jego flagę przykładowo to wrzucam wybór do sesji/cookie aby był nadrzędny.
Można dodatkowo dać punkt 2a i wykorzystać geolokalizację - ustawiając język dla lokacji - to już kwestia wyboru - ja bardziej patrzę na przeglądarkę.
Co dalej? - Dalej wystarczy zrobić pliki językowe dla każdego języka, z tłumaczeniami treści strony
np.: $lang['home'] = 'Strona główna' dla PL i $lang['home'] = 'Main page' dla EN itp..
Trochę z tym babrania i też bym zastosował coś gotowego - ale wprowadzenie takiego systemu w coś co już istnieje nie jest wielkim problemem, sam system wprowadza się szybko - długo zajmują tłumaczenia... ;P
HTH!