Ahoj,
na tému multi-jazyčný web je tu niekoľko diskusií, ale stále sa neviem rozhodnúť.
Chcel by som nájsť nejaký kompromis medzi pomerne jednoduché vytvorenie VS. nízka systémová náročnosť.
Databázové riešenie je síce výborné ale je pomerne zle prenosné tj. ak by som vytváral web na rôznych hostingoch. Preto som ostal pri myšlienke súborov s jazykom.
Po dlhšej úvahe som skončil pri použití súboru so štruktúrou ini súboru, ale tu mi zas nesedí tá náročnosť na systém, keďže je ini súbor parsovaný do poľa, čo je podľa mňa blbosť využiť pri mutáciách napr. v 3 jazykoch pri stránke s 5 podstránkamy a pomerne väčšieho množstva pevného textu (nadpisy, labely, hlavičky, hinty). Je tu ešte možnosť použiť pre každý jazyk zvlášť súbor, ale to je zas neprehľadné (subjektívny pohľad).
Čo by ste navrhli vi ako kompromis človeku, ktorý nemá silný skill v PHP?
php - kopromis viac jazyčnej stránky
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: php - kopromis viac jazyčnej stránky
navrhol by som ti srať na subjektívne pohľady a použiť na každý jazyk zvlášť súbor. Ten súbor ale nerob ako ini, ale rovno do neho ulož pole, tzn: a potom na stránke to vypíšeš ako echo $lang["NUMBER"];
stačí si načítať súbor s príslušným jazykom, teda include("lang/slovak.php"); a vybavené
Kód: Vybrať všetko
<?php
if (empty($lang) || !is_array($lang))
{
$lang = array();
}
$lang = array_merge($lang, array(
"CONST" => "konštanta",
"NUMBER" => "číslo"
));
?>
stačí si načítať súbor s príslušným jazykom, teda include("lang/slovak.php"); a vybavené
Re: php - kopromis viac jazyčnej stránky
Mne osobne sa veľmi nepáči riešenie kde sú reťazce uložené v .PHP. Osobne som to poriešil tak ,že:
- Vytvoril som si zložku s názvom i18n ,do ktorej som si uložil dané jazykové mutácie. Všetky tieto mutácie sú uložené v .XML tz. i18n/en.xml, i18n/sk.xml atď...
- Vytvoril som si nový súbor (S triedou) Locale ,ktorá sa stará o výber daného stringu. V tejto triede si skontrolujem aktuálny jazyk (Ktorý mám uložený v session) a do premennej si uložím názov súboru napr. en.xml
- Pre výber daného stringu následne len zavolám funkciu L() (locale) tz. echo L("Hello"); (Samozrejme triedu treba includnúť do daného .php / Funkciu volať z triedy)
* Pokiaľ neexistuje súbor daného jazyka tak defaultný je stále en.xml / Pokiaľ neexistuje daný reťazec napríklad "Hello" tak len vypíšem tento predaný string...
// Je mi jasné ,že moje riešenie nieje také jednoduché ako to vyššie od audiotracka a pre niekoho možno aj zbytočne komplikované (Komplikovanejšie) no ja osobne preferujem toto
- Vytvoril som si zložku s názvom i18n ,do ktorej som si uložil dané jazykové mutácie. Všetky tieto mutácie sú uložené v .XML tz. i18n/en.xml, i18n/sk.xml atď...
- Vytvoril som si nový súbor (S triedou) Locale ,ktorá sa stará o výber daného stringu. V tejto triede si skontrolujem aktuálny jazyk (Ktorý mám uložený v session) a do premennej si uložím názov súboru napr. en.xml
- Pre výber daného stringu následne len zavolám funkciu L() (locale) tz. echo L("Hello"); (Samozrejme triedu treba includnúť do daného .php / Funkciu volať z triedy)
* Pokiaľ neexistuje súbor daného jazyka tak defaultný je stále en.xml / Pokiaľ neexistuje daný reťazec napríklad "Hello" tak len vypíšem tento predaný string...
// Je mi jasné ,že moje riešenie nieje také jednoduché ako to vyššie od audiotracka a pre niekoho možno aj zbytočne komplikované (Komplikovanejšie) no ja osobne preferujem toto
Re: php - kopromis viac jazyčnej stránky
Vyberať preklad z xml pri každom vypisovaní mi príde dosť pomalé. Lepšie je načítať si na začiatku všetky reťazce do arrayu a potom vypisovať.S-player napísal: - Vytvoril som si zložku s názvom i18n ,do ktorej som si uložil dané jazykové mutácie. Všetky tieto mutácie sú uložené v .XML tz. i18n/en.xml, i18n/sk.xml atď...
- Vytvoril som si nový súbor (S triedou) Locale ,ktorá sa stará o výber daného stringu. V tejto triede si skontrolujem aktuálny jazyk (Ktorý mám uložený v session) a do premennej si uložím názov súboru napr. en.xml
- Pre výber daného stringu následne len zavolám funkciu L() (locale) tz. echo L("Hello"); (Samozrejme triedu treba includnúť do daného .php / Funkciu volať z triedy)
* Pokiaľ neexistuje súbor daného jazyka tak defaultný je stále en.xml / Pokiaľ neexistuje daný reťazec napríklad "Hello" tak len vypíšem tento predaný string...
Viacjazyčnú stránku by som riešil placeholdermi pre každý prekladaný reťazec (napr. pre "Vitajte na stránkach" by to bolo niečo ako $(welcome-msg)) a pri zobrazovaní stránky by som všetky výskyty tohoto reťazca nahradil jeho ekvivalentom pre aktívny jazyk. Niečo také pre 100% efektivitu potrebuje aj trochu úprav v kóde interpretera alebo servera.
Najlepšie bude použiť gettext, ten je dosť rozšírený (napr. websupport, wedos).
Re: php - kopromis viac jazyčnej stránky
Áno aj tak sa to dá vylepšiť... Po pravde ja som rýchlosť nejako silno neriešil už len z toho dôvodu ,že jedna stránka obsahuje v priemere do 10 reťazcov. Vďaka ,ale za tippcsiete napísal:Vyberať preklad z xml pri každom vypisovaní mi príde dosť pomalé. Lepšie je načítať si na začiatku všetky reťazce do arrayu a potom vypisovať.
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: php - kopromis viac jazyčnej stránky
Nevyužíva gettext náhodou MO súbory s jazykom? To je na mňa moc. Ostanem pri audiovom návrhu riešenia.