Wersje jezykowe

0

Witam.
Jakie znacie najbardziej wydajne sposoby tworzenia kilku wersji jezykowych dla sredniej wielkosci portalu.

Ja zawsze robie zmienna lang no ale przez to mam mnostwo plikow potem.
Zastanawiałem sie ze mozeby zrobic cos podobnego:
plik: polski.lng

001 =Strona Główna
002 =Bohater
....

plik: wloski.lng

001 =la pagina principale
002 =il protagonista
...

Tylko jak spodowac, aby inkludował własnie te linijke z tego pliku (nawet te linijki moga nie zawierac 001 itd). a moze ktos ma lepszy pomysł. Czekam na komentarze i własne pomysły.

Pozdrawiam
gw

0

Mozna zrobić tak jak na przykład w phpBB czy Apollo - mamy kilka plików PHP, na przykład polski.lng.php i includować odpowiedni plik w zależności jaki język jest potrzebny.

A w tym pliku na przykład coś takiego:

$lang["mainpage"] = 'Strona główna';

i potem we właściwych sryptach się odwoływać poprzez $lang[cośtam] :)

0

Mógłbys to troszke bardziej rozwinac, bo to interesujace.

0

no więc w tworzonym przeze mnie systemie Apollo zrobiłem coś takiego, że mamy pliki php o nazwach lang_pl.php, lang_en.php i inne.

W tych plikach (które są notabene w katalogu lang) są takie rzeczy:

<?
  $lang["success"] = 'Sukces';
  $lang["error"] = 'Błąd';
?>

i tak dalej, dla każdego języka wykaz wszystkich stringów jakie moga być wykorzystywane.

I potem w jakimś skrypcie PHP mam zawsze na początku coś takiego:

include("lang/lang_" . $HTTP_GET_VARS["lang"] . ".php");

co powoduje włączanie odpowiedniego pliku ze stringami w zależności od tego co jest przekazane do skryptu jako GET (ale równie dobrze można by dla każdego użytkownika oprzeć to na ciastach czy sesjach czy czymśtam). Następnie gdy coś wyświetlam w skrypcie PHP to robię to w taki sposób:

if (operacje_ok) {
  echo $lang["success"];
} else {
  echo $lang["error"];
}

i w zależności jaki język jest wybrany (u mnei przez przekazanie odpowiedniego parametru) to w odpowiednim języku jest wyświetlany tekst.

0

no ok jezeli chodzi o jakies komunikaty z portalu ale co jezeli chodzi o np. artykuly ? stworzyc 2 bazy ? 2 kolumny ? czy jak ?

0
nediam napisał(a)

no ok jezeli chodzi o jakies komunikaty z portalu ale co jezeli chodzi o np. artykuly ? stworzyc 2 bazy ? 2 kolumny ? czy jak ?

To tutaj ja może odpowiem, jak mam to zorganizowane.

Stronka, którą robię jest specyficzna, więc nie przestraszyć się...

W uproszczeniu:

Każdy temat na forum/artykuł/news ma i-węzeł. Zawiera on podstawowe informacje. Tzn. id autora, datę utworzenia/modyfikacji itp. itd. (układ na wzór tradycyjnych systemów uniksowych :P).

Drugą tabelą jest tabela z danymi. Pojedynczy rekord zawiera nr i-węzła, język, temat newsa/artykułu, treść artykułu itp.

Wyświetlanie jest poprzez proste zapytanie:

SELECT ... FROM tabela_z_i_wezlem i, tabela_z_danymi d WHERE i.id = d.id_i_wezla AND lang = $lang;

Jeżeli zwrócony zostanie jakiś wiersz, to zostanie artykuł wyświetlony. Jeżeli nie, to informacja, że nie ma w tym języku oraz "propozycja" przetłumaczenia.

0

z kolei u mnie jest to zrobione bardzo prosto. W każdej tabeli, gdzie mog być dane wielojęzyczne znajduje się kolumna cośtam_lang zawierająca dwuliterowy kod języka. I wyświetlane są tylko dane w odpowiednim języku - znaczy takie dla których ich kod jest taki sam jak kod wybrany przez użytkownika oglądającego stronę.

0
Dryobates napisał(a)

AND lang = $lang;

Z calym szacunkiem, ale powalajace rozwiazanie to nie jest (nawet przy zachowaniu ukladu na wzor tradycyjnych systemow uniksowych ) :D .

Generalnie to bez przesadyzmu, wystarczy troche pokombinowac, a juz nie bawmy sie w jakis ultra-performens :D i zyskiwanie ulamkow sekund, ktore i tak pewnie zmarnujemy na zmianie kodowanie or smth :P.

Bralem udzial w tworzeniu serwisu gdzie bylo 5 wersji jezykowych i to wszystkiego - dynamicznego menu we flashu (XML), newsow, artykulow i innych systemow powiazanych. Generalnie skladowanie danych zostalo rozbite na baze SQL, baze tekstowa na plikach i statyczne pliki XML edytowane z aplikacji klienckiej. Kluczowa do wszystkiego byla tajemniczna zmienna $lang ;).

0
roSzi napisał(a)
Dryobates napisał(a)

AND lang = $lang;

Z calym szacunkiem, ale powalajace rozwiazanie to nie jest (nawet przy zachowaniu ukladu na wzor tradycyjnych systemow uniksowych ) :D

A to wcale nie miało być powalające :P Najprostsze jakie mi przyszło do głowy.

A wspomnienie systemów uniksowych było tylko po to, by wytłumaczyć, dlaczego mam tak dziwnie porozbijane wpisy :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1