Ahoj, chci se tady lidí na programujte.com zeptat jak by navrhli model vícejazyčného webu. Potřebuji tak 5 jazyků a zajímá mě jak se to v praxi provádí. Pokud možno čistý kod ne prasárnu. :smile1: Děkuji
Fórum › PHP
Lokalizace
1. moznost - pole, treba
$lang["car"]["en"]="Auto"; // definice
echo $lang["car"][LANG]; // vyvolani
2. konstanty v includovanych souborech (stejne to jde i s temi poli)
v lang_cz.php
TXT_CAR="auto";
3. Gettext. ASi nejlepsi moznost. Preklady stringu z jednoho jayka do ostatnich si nadefinujes v externim datovem souboru (je na to externi editor) a zkompilujes. V PHP je pak vyvolavas jako
echo _("car");
Vyhoda je ze je to rychle a rychle se to pouziva (dokonce se na to da celkem jednoduse web prekonvertovat i kdyz je hotovy) a ze neprelozene stringy jsou zobrazene tak jak jsou, bez nejakych chyb (ty prekladane stringy mohou byt i cele vety, to neni problem, takze ty mas jeden zakladni jazyk v kodu a alternativy v datovem souboru). Nevyhodou je ze je to dost neobratne kdyz tam treba potrebujes pridat jeden string. Pogogli.
4. Tahat to z databaze. Ale to je fakt krkolomne a vice CPU narocne.
Dôležité je tiež uvažovať o tvare url adries pre rôzne jazyky. V žiadnom prípade neskúšaj riadiť jazyk pomocou cookies ani session premmenných. Každá jazyková verzia by mala byť dostupná pod samostatnou url a odosielať korektné hlavičky, inak ti google zožerie iba jednu verziu.
Ak používaš, alebo chceš používať nejaké pekné ("čitateľné") url, tak uvažuj aj o tom, že v každom jazyku može byť iný nie len riadiaci znak jazyka ale aj samotný základ adresy. Napríklad taká mozilla to nerieši a používa iba anglické názvy v url:
http://www.mozilla-europe.org/en/firefox/features/
http://www.mozilla-europe.org/sk/firefox/features/
http://www.mozilla-europe.org/cs/firefox/features/
...
http://www.mozilla-europe.org/firefox/features/
stránka bez riadiaceho znaku jazyka spôsobí redirect na url s jazykom podla jazykového nastavenia prehliadača...
Tiež sa často používa strčenie jazyka do subdomeny:
sk.domena.xyz/...
cs.domena.xyz/...
en.domena.xyz/...
www.domena.xyz/... bez informacie o jazyku, urobí redirect...
Neodporúčam používať viac domén najvyžšej úrovne, lebo stratíš možnosť prenášať cookies / sessions cez jednotlivé jazykové verzie.
Ja osobne by som použil asi ten subdomenový (en.domena...), alebo adresárový (domena/en/...) tvar a podľa veľkosti a typu webu, prípadne zložitosti, by som sa rozhodol, či by som prekladal aj url alebo ju nechal v jednom (asi v anglickom) jazyku. Modulom mod_rewrite by som si všetko dal presmerovať na jeden php controller a v ňom spracúval. Ako to ďalej riešiť vo vnútri php už spomenul CommanderZ. Len chcem dodať, že znova závisí od veľkosti a typu webu, či by som dáta odkladal v súboroch alebo databáze...
pokud bych ale resil subbomenovy nebo adresarovy znamenalo by to ze bych mel pri 4 jazykovych mutacich 4x vytvoreny web? Coz mi prijde neprakticky kdyz chci neco upravit ze to musim delat presne ve 4 webecha to nemluvim o rozsahlejsich upravach. Nebo jak by s to resilo? Neco jako rikal CommanderZ?
jiste presmerovani mi je jasne bud .htaccess nebo $_GET ci prevadet na $_SESSION ale kam? budu se presmerovavat rekneme do adresare cs, en, ... kde bude cekat webova jazykova mutace? Cili duplicitni web ktery jen textove vystupy bude mit v danem jazyce?
Já si kdysi udělal jednu malou funkci. Je poměrně nedokonalá, ale nic lepšího předat nemůžu.
Jazyková verze se uchovává v SESSIONS. Funkce change_language_set(string $lang) mění hodnotu. Je důležité testovat, zda-li jazyková verze opravdu existuje, aby nedocházelo k problémům. Dá se testovat dynamicky výpisem složky s jazykovými verzemi, ale pro moje účely to bylo zbytečné.
<?
function change_language_set ($new_language)
{
unset($_SESSION['language']);
if ($new_language == "czech") $_SESSION['language'] = 'cs';
elseif ($new_language == "english") $_SESSION['language'] = 'us';
elseif ($new_language == "russia") $_SESSION['language'] = 'ru';
elseif ($new_language == "deutsch") $_SESSION['language'] = 'de';
else $_SESSION['language'] = 'cs';
}
?>
Jak jsem řekl, je to starý kód. Lepší by bylo použití switch.
Samotná funkce je poměrně neohrabaná, ale funkční.
//string files
if (!empty($_SESSION['language'])) $GLOBALS['soubor'] = file("include/string/string_".$_SESSION['language'].".txt");
else $GLOBALS['soubor'] = file("include/string/string_cs.txt");
//function - parameters: number of string, file, the czech text
function string($c,$soubor,$t)
{
include "include/string/preference.txt";
if ($c < 10) $cislo = '00';
elseif ($c < 100) $cislo = '0';
$string = 'STRING_'.$cislo.$c;
for ($i = 0;$i != $max_string;$i++)
{
//comments and empty rows
$arr = str_split($soubor[$i]);
if (($arr[0] == ";") OR ($arr[0] == "#") OR ($arr[0] == " ")) continue;
//searching the string
list ($number, $not_need) = explode(' ',$soubor[$i]);
if ($number == $string)
{
$text = $soubor[$i];
break;
}
}
//exploding and tooking the text without symbols
$text1 = $text;
list($not_need, $text) = explode($string, $text);
list($navrat, $not_need) = explode(';', $text);
if (empty($navrat)) $navrat = 'Text error in '.$string;
return $navrat;
}
?>
Samotný jazykový soubor může vypadat nějak takto
STRING_001 Main page; #úvodní stránka
STRING_002 Stats; #statistiky
STRING_003 Buildings; #budovy
STRING_004 Grant; #dotace
STRING_005 Attack; #útok
STRING_006 Command; #velení
STRING_007 Post; #pošta
STRING_008 List of players; #žebříček
STRING_009 Options; #nastavení
STRING_010 Logout; #odhlásit
cheeesterb
budu se presmerovavat rekneme do adresare cs, en, … kde bude cekat webova jazykova mutace? Cili duplicitni web ktery jen textove vystupy bude mit v danem jazyce?
Myslím, že tím přesměrováním Santas myslel něco jiného. Kopii webu budeš mít jenom jednu, např. v rootu, a pokud někdo bude chtít přistupovat na nějakou jazykovou mutaci, využiješ kupř. Apachí mod_rewrite a podstrčíš stránku z rootu, které přidáš parametr určující jazykovou verzi, např. lang. Takže když bude požadavek na /cs/nejaka-stranka, bude to to samé jako požadavek na /nejaka-stranka?lang=cs. (A samozřejmě by bylo dobré, kdyby když někdo zadá přímo /nejaka-stranka?lang=cs, aby ho to přesměrovalo /cs/nejaka-stranka (se stavovým kódem 301), jelikož pak, kdyby někdo na adresu s parametrem lang hodil odkaz, chytly by se toho vyhledávače a už tu máme duplicitní obsah na dvou adresách – /cs/nejaka-stranka a /nejaka-stranka?lang=cs.)
Pak tu samozřejmě nastává problém, o čemž se zmiňoval Prog., jestli když někdo zadá /en/nejaka-stranka, jestli mu jenom podstrčit /nejaka-stranka?lang=en, či ho přesměrovat na /en/some-page (které by se pak samozřejmě podstrčila /some-page?lang=en).
survik1
Já si kdysi udělal jednu malou funkci.
…aneb znovu vynalézáme kolo :o) Tohle by měl gettext zvládnout mnohem lépe, jednodušeji a rychleji.
2survik: proc zbytecne tak slozite pri kazdem nacteni stranky parsovat textovy soubor, kdyz muzes mit pole a soubor includovat.
Popripade muzes mit v jednom poli i vsechny jazykove mutace a jenom posle prefixu indexů klíčů (například) rozlisis pouzivane retezce.
SESSION je IMHO najhoršie riešenie, aké by mohlo byť použité. Crawleri nedokážu pracovať so session. Keď nie sú informácie o jazyku uložené v URL, crawler (nehovorím len o google) proste nezistí, že existuje viac jazykových mutácií. Vlastná skúsenosť.
takze url cz/nejaka-stranka/ chapu a jeji overeni jaka lokace v $_GET lezi chapu take. Ted bych tedy potreboval nejak ucelit samotny vystup na strance pro ruzne mutace. At uz zminovane pole nebo externi soubor. Myslim ze pole bude ale rychlejsi. Rekneme aby byl samotny textovy vystup oddeleny od kodu. Je potreba pocitat i s prelozenim vet typu: Prihlaseni se nezdarilo ...
Ma nekdo nejaky model ktery by byl rychly a spolehlivy?
cheeester
Ma nekdo nejaky model ktery by byl rychly a spolehlivy?
Úplně nejjednodušší řešení, které je prakticky tototžné s gettextem, akorát zcela v PHP (takže nejspíš bude pomalejší, než samotný gettext, ale nepotřebuje zase, aby byl na hostingu nainstalován):
<?php
function __($text, $new_translations = null) // fce _() je už zabraná gettextem :o/
{
static $translations = array();
if (is_null($text) && !is_null($new_translations)) {
$translations = $new_translations;
}
if (array_key_exists($text, $translations)) {
return $translations[$text];
}
return $text;
}
Když ti přijde požadavek, tak jednoduše do funkce „propašuješ“ překlady:
if (in_array($_GET['lang'], array('en', 'cs', 'de', 'sp'))) {
__(null, require $_GET['lang'] . '.php');
}
Řekněme, že nás bude zajímat česká lokalizace (v proměnné $_GET['lang'] je řetězec 'cs'), takže soubor bude cs.php a může vypadat následovně:
<?php
return array(
'hello, world!' => 'ahoj, světe!',
'OK' => 'Budiž'
);
A teď už akorát získáváme, co potřebujeme:
echo __("hello, world!"); // ahoj, světe!
echo __("OK"); // Budiž
to vypada velice slibne a pomerne i prehledne a lehce editovatelne v kodu. jen se chi zeptat kam presne umistim
if (in_array($_GET['lang'], array('en', 'cs', 'de', 'sp'))) {
__(null, require $_GET['lang'] . '.php');
}
primo do rootu aplikace? jinak moc diky za pomoc je to good :smile1:
cheeester
jen se chi zeptat kam presne umistim ... primo do rootu aplikace?
Musí to být v každém skriptu, na který mohou přijít požadavky a budou se v něm užívat překlady. Samozřejmě to stačí načítat pouze jednou. Takže např. pokud budeš všem požadavkům podstrkávat index.php, mělo by to být někde na jeho začátku.
osobně bych určitě řešil pomocí gettextu. Pokud opravdu nejde o mini projekt, za chvíli narazíš na problémy jako je množné číslo, udržování překladů apod. Gettext toto už má vymyšlené....
jeste se potykam s problemem jak predavat $_GET['lang']? Musim kazdy odkaz predavat s lang?
<a herf="index?lang=$_GET['lang']&stranka=moje_stranka">
nastava problem ve formularich kde bych musel predavt lang ve formulari v nejakem hidden inputu a posilat jej postem coz mi neprijde zrovnajako reseni
cheeester
a jak se s gettext pracuje nebo jak by to s gettextem vypadalo?
Viz manuál[1]. Projdi si příklady, které jsou k jeho funkcím.
jeste se potykam s problemem jak predavat $_GET['lang']? Musim kazdy okdaz predavat s lang?
Nemusíš. Ale nevím, jak by ses pak na odkazovaných stránkách chtěl dozvědět, jaký jazyk zvolit :o)
Samozřejmě je monžné si udělat nějaký „helper“, který se ti postará o to, aby v adrese parametr lang byl.
nastava problem ve formularich kde bych musel predavt lang ve formulari v nejakem hidden inputu a posilat jej posem coz mi neprijde zrovnajako reseni
Pro formulář posílaný metodou post stačí akorát, když lang přidáš do parametru action. Pokud posíláš metodou get, všechno za otazníkem z action se vymaže a naplní daty z formuláře, takže tady asi bude nutné tam nějaký hidden dát.
[1] http://php.net/gettext
To cheeester :
k dispozicii máš niekoľko možností:
www.frima.com/stranka.html?lang=en
www.frima.com/stranka.html?lang=cs
www.frima.com/stranka.html?lang=sk
www.frima.com/en/stranka.html
www.frima.com/cs/stranka.html
www.frima.com/sk/stranka.html
en.frima.com/stranka.html
cs.frima.com/stranka.html
sk.frima.com/stranka.html
...prečo si si vybral práve tú s metódou get ???
To cheeester :
Jazyk na subdoméne
Nastavenie apache:
virtual host:
<VirtualHost ip:80>
ServerName domena.com
ServerAlias *.domena.com
DocumentRoot /cesta/k/docroot/
</VirtualHost>
v každom php ako prvý naincluduj nejaky language_controller.php
<?php
$server_name = 'domena.com';
$languages = array('en','cs','sk');
$first_dot = strpos($_SERVER['SERVER_NAME'],'.');
$language = substr($_SERVER['SERVER_NAME'],$first_dot);
if (!in_array($language,$languages))
{
$language = 'en';
// todo: skus pouzit jazyk z nastavenia browsera
}
if ($language.'.'.$server_name!==$_SERVER['SERVER_NAME'])
{
header("HTTP/1.1 303 See Other");
header('Location: http://'.$language.'.'.$server_name . $_SERVER['REQUEST_URI']);
exit();
}
echo 'jazyk: ['. $language .']';
?>
...a ešte lepšie by bolo pomocou mod_rewrite všetky requesty smerovať na jeden php súbor a v ňom spracúvať zvyšok
Ak sa chystáš používať https, tak použi radšej adresáre
cheeester
ten 'helper' by bylo asi tak co?
Normální funkce, která by ti jednoduše sestavila adresu. Řekněme, že tedy budeš k určování stránky používat ten parametr stranka a jazyka parametr lang, pro jednoduchost řekněme, že na začátku skriptu si nadefinuješ konstantu LANG (define('LANG', $_GET['lang']);). Takový sestavovač adresy by pak mohl vypadat následovně:
function url($stranka, $params)
{
return '?' . http_build_query(array_merge(array(
'lang' => LANG,
'stranka' => $stranka
), $params
), '', '&'
);
}
Pak řekněme, že se chceš odkázat na stránku foo a chceš jí předat parametr bar = baz:
<a href="<?php echo url('foo', array('bar' => 'baz')); ?>">foo</a>
==
<a href="?lang=cs&stranka=foo&bar=baz">foo</a>
Manuál:
http_build_query() – http://php.net/http_build_query
array_merge() – http://php.net/array_merge
rikam si ze proste udelam to ze co bude v $_GET['lang'] bude automatickz take $_SESSION['lang'] a pak nemusim vsude posilat jaky je zvolen jazyk ale musim to nejak z toho dostat zpet do adresy
Nečetl jsi, co tu již někteří psali, že takhle rozhodně ne, protože ti pak vyhledávač bude indexovat jenom jednu verzi?
a na odkazu gettext na php.net nic nepisi
To jsi takové pako, že nedokážeš proklikat odkazy, co tam jsou? :o)
nevim jak by to pracovaloi na subdomene a jak bych z adresy ziskal informaci jaky ze jazyk je zvolen?
Buď při přepisování jde přidat nějaký parametr, nebo v HTTP hlavičce Host (přístupná v PHP přes $_SERVER['HTTP_HOST']) by měla být celá doména, včetně všech subdomén, alespoň myslím.
To Prog. : Diky to vypada slusne. co myslis tim zkus pouzit jazyk z browsera?
Pokud se pak na strance okazuji musim i se subdomenou nebo staci jen na domenu a subdomna se presmeruje. POkud uzivatel navsevuje web poprve tak jeste nevime jakou lakalizaci chce a mela by se nastavit nejaka vychozi
jo uz to vidim $language = 'en';
To Prog. : jak pak jeste bude vypadat .htaccess. Bude muset byt specialne pravidla prokazdy okdaz na kazdou stranku dale lokalizace kdyz chci delat pekne url?
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^kategorie/([^/]+)/([0-9]{1,3})?/?$ ?kategorie=$1&page=$2 [L]
Myslel som tým to, že namiesto toho $language='en' skús zistiť jazykové nastavenie browsera (z $_SERVER['HTTP_ACCEPT_LANGUAGE']) a podľa toho rozhodnúť o jazyku,...$language = 'en';
// todo: skus pouzit jazyk z nastavenia browsera
Ako na stránku linkovať? Ak bude link na slovenskej stránke tak asi rovno na slovenskú verziu... z českej na českú...
Pre tých čo na linky klikajú by zasa bolo výhodné linkovať na verziu bez určenia jazyka (použiť napr. www). Potom by ich to automaticky presmerovalo na ich jazyk... Nevýhodou by zas bolo asi nerovnomerné rozloženie pageranku, google by videl linkovanie iba na jeho jazykovú verziu.
Vo výsledku to bude asi jedno, aj tak ľudia budú linkovať, ako im príde.
Hlavne nezabudni prelinkovať jednotlivé jazykové verzie medzi sebou, tak by sa mal ten pagerank rovnomernejšie rozložiť.
Link na aktuálnu stránku v jazyku $language bude vyzerať asi takto:
echo '<a href="http://'.$language.'.'.$server_name . $_SERVER['REQUEST_URI'].'">'.$language.'</a>';
Nezabudni na hlavičky:
<?php
..
Header('Content-Language: '.$language);
...
?><html lang="<?php echo $language ?>" ...>
<head>
...
<meta http-equiv="Content-Language" content="<?php echo $language ?>" />
...
V rámci stránky používaj iba relatívne adresy a máš po probléme - do linkov nemusíš vkladať žiadnu informáciu o jazyku.
tie rewrite ruly nemajú nič spoločné s doménou, takže nemáš tam čo meniť.
ale odporúčam ti sa na ne vykašlať a použi iba jedno:
RewriteEngine On
RewriteRule ^(.*)(\.html|\.htm/)$|^$ controller.php [L,QSA]
O všetky requesty končiace lomítkom alebo .htm(l) sa ti postará jeden script. Požadovanú url adresu uvidíš v $_SERVER['REDIRECT_URL'] a jednoducho si ju spracuješ phpčkom, čo mňe prijíde omnoho jednoduchšie...
ted nechapu jako to resis v tom controller.php delam to kalsicky pres .htaccess. V controller.php mas co?
Jiank diky za radu s lokalizaci konecen vidim nejake prakticke reseni ktere neni "prasacke" a je jednoduse riditelne. Vazne diky
controller jednoducho dostane všetky requesty. Ako sa budú ďalej spracúvať sa rozhodne v php kóde. Funguje to rovnako ako keď použiješ
RewriteRule ^kategorie/([^/]+)/([0-9]{1,3})?/?$ ?kategorie=$1&page=$2 [L]
s tým rozdielom, že na controller.php sa presmerujú všetky requesty. Nepotrebuješ používať žiadne ?=$.. pretože pôvodnú url aj tak z php uvidíš a takto si aspoň neprepíšeš prípadné GET premmenné
Dosť ma tento problém zaujal, tak som zbúchal náčrt takého "mini frameworku", pre prácu s viacerými jazykmi. Na určenie jazyka podporuje aj sub-domény, aj adresáre.
všetky súbory stačí rozbaliť do docroot adresára s nastaveniami, ktoré už boli vyžšie spomenuté.
readme.txt
Štruktúra súborov
--------------------------------------------------------------------------------
|- .conf/
| |- cfg.language.php -- nastavenie subdomeny/adresare na určenie jazyka
|
|- .inc/
| |- ctl.language_and_url.php -- nastavuje jazyk a kontroluje url
| |- fns.locale.php -- funkcie na čítanie lokalizovaných reťazcov
| |- fns.path.php -- pomocné funkcie na prácu s cestami
|
|- _inc/ -- ukladá časti stránok, ktoré sa includujú (napr menu)
|- content/ -- obsah web server
|- data/ -- css, obrazky, ...
|- locale/ -- ukladá lokalizácie
|- controller.php -- skript, prijímajúci všetky requesty
Princíp:
------------
1. request => spusti sa controller.php
2. controler spusti ctl.language_and_url.php - zanalyzuje url, nastavy jazyk,
pripadne prerobi url a urboi redirect
3. naincluduje sa a vykona subor content/ [pozadovana_cesta] .php
Funkcie na lokalizaciu:
----------------------
l($vyraz,[$lang=default])
vrati preklad výrazu v požadovanom jazyku
ak nie je zadaný $lang -- použije sa aktuálny jazyk
l_e(),l_s(),l_es()
odvolavaju sa na l() vid: fns.locale.php
prekladany výraz sa sklada z dvoch častí:
l('kniznica:label');
ak je kniznica vynechaná, použije sa aktuálna knižnica:
l('label')
aktuálna knižnica je shodná s aktuálnou cestou, lepšie vysvetlenie
bude na príklade
knižnica sa môže zadávať relatívne: l('./ina/knižnica:label')
aj absolútne l('/kniznica/:label');
knižnice sú umiestnené takto: locale/ [jazyk] [/knižnica].locale.php
l_url($cesta, [$lang=default])
vytvorí url na danú cestu v požadovanom jazyku
- akceptuje relatívne aj absolútne cesty
- pre nastavenie url na aktualny súbor v inom jazyku:
l_url('',[jazyk])
-------------------------------------------------------------------------------
...ehm, radšej vysvetlím na príklade:
Request bude smerovaný na:
www.domena.com/[jazyk]/toto/je/stranka.html (pre adresárovú verziu)
(alebo)
[jazyk].domena.com/toto/je/stranka.html (pre subdoménovú verziu)
ako [pozadovana_cesta] sa chápe /toto/je/stranka.html,
takže sa spusti script
/content/toto/je/stranka.html.php
[aktuálna knižnica] sa nahra zo suboru:
/locale/[jazyk]/toto/je/stranka.html.locale.php
ak by request smeroval na adresár:
www.domena.com/[jazyk]/toto/je/adresar/ (pre adresárovú verziu)
(alebo)
[jazyk].domena.com/toto/je/adresar/ (pre subdoménovú verziu)
ako [pozadovana_cesta] sa chápe /toot/je/adresar/index.html
spusti sa script:
/content/toot/je/adresar/index.html.php
aktuálna knižnica] sa nahra zo suboru:
/locale/[jazyk]/toot/je/adresar/index.html.locale.php
-----
Myslím že tých zdrojákov nie je až tak veľa, že by sa nedali pochopiť...
v prípade otázok progman@centrum.sk, ale väčšinou za odpoveď neručím...
..v prípade otázok tu do fóra
edit: Našiel som bug, .htaccess v adresári locale/ sa chápe ako jazyk
./inc/ctl.language_and_url.php, riadok 36: doplniť:
if ($lng && $lng!=='.' && $lng!=='..' && $lng[0]!=='.')
nevypada to vubec zle jen se mi to nedari spustit. spoustim localhost/content/index.html.php ale pisem mi to chybu hned na prvnim radku.
<?php include './_inc/page/start.php'; ?>
cesta neexistuje pokud tedy napisi spravnou cestu tak uz to jede ale zase to hodi dalsi chybu. Tobe to jede v pohode? Nevim jestli to nedela apache na localhostu
Ja to mám tiež na localhoste, teraz dokonca na windowse, a ide to...
Ak to chceš skúsiť takto, tak v .conf/cfg.language.php nastav $lang_setting_in_subdomain = false; - nastavíš tak, adresárovú verziu a zadaj url http://localhost/ malo by to spraviť redirect na http://localhost/en/ Nemám to otestované, no malo by to bežať aj takto.
Ak si to chceš ale poriadne otestovať - aj subdoménové nastavovanie jazyka - potrebuješ si "navirtualizovať" doménu...
1. na apache vytvor virtual host ktorý bude prijímať všetky requesty na (hocičo).multilang.com:
<VirtualHost *:80>
ServerName multilang.com
ServerAlias *.multilang.com
DocumentRoot /cesta/kam/si/uložíš/projekt/
</VirtualHost>
<Directory "/cesta/kam/si/uložíš/projekt/">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
2.1 do /cesta/kam/si/uložíš/projekt/ nakopíruj súbory
2.2 môžeš opraviť bug, ktorý som našiel v ctl.language_and_url.php na riadku 36 - doplň do podmienky && $lng[0]!=='.'
2.3 môžeš vymazať súbor .inc/.Untitled-1.marks -- je to bordel ktorý som si všimol len teraz - nechal to tam môj editor keď padol.
3. nadefinuj na svojom počítači preklad domény www.multilang.com na lokálnu adresu:
3.1. Nájdi súbor hosts
vo windowse: C:\WINDOWS\system32\drivers\etc\hosts
v linuxe: /etc/hosts
3.2. doplň do neho riadok:
127.0.0.1 multilang.com www.multilang.com cs.multilang.com sk.multilang.com en.multilang.com
Po uložení súboru by mal tvoj pc prekladať danú doménu na ip 127.0.01 - overiť to môžeš napr programom ping:ping cs.multilang.com
4. Naťukaj do prehliadača www.multilang.com a malo by to bežať.
Neošetril som existujuce cesty, ak zadáš do url cestu do adresára, alebo k nejakému súboru, ktorý fyzicky existuje, vyhodí to chybu (forbidden). Ak by si zadal iba http://localhost/ a v .conf/cfg.language.php nastavil $lang_setting_in_subdomain = false; - asi by to potom šlo. Pri subdoménovom móde je potrebné aby doména obsahovala aspoň jednu bodku (napr: localhost.localdomain), inak to naozaj bude vyhadzovať chybu na ktorú som nemyslel.spoustim localhost/content/index.html.php ale pisem mi to chybu
Do prehliadača ale nezadávaj cestu /content/index.html.php. To je vnútorná cesta, pod ktorou je script uložený. Ten sa naincluduje v súbore controller.php na 18 riadku. Zadaním akejkoľvek url sa spustí práve controller.php a ten si prečíta požadovanú cestu a naincluduje potrebný súbor.
Zadaj len niektorú z týchto ciest (je tam preddefinovaný - narýchlo zbúchaný príklad):
www.multilang.com/
www.multilang.com/my_projects/
www.multilang.com/my_projects/my_first_project.html
www.multilang.com/my_projects/my_other_project.html
www.multilang.com/about_me.html
jj. chci se jeste zeptat jak by se tedy resila ta lokalizace pomoci subdomen jak nastavim pak v .htaccess hezke url? nejspise subdomena zapisu
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^kategorie/([^/]+)/([0-9]{1,3})?/?$ ?kategorie=$1&page=$2 [L]
vliv nema a jen meni cast za domenou ze?
Nejednodussi je to pres konstanty nebo pole. Priklad najdes hned ve druhem prispevku v tomhle threadu. A priste se prosimte obtezuj precist alespon to vlakno, kam prispivas s nejakym dotazem. Pouzivani nejake formy vyhledavani radsi ani nenavrhuju.
Databaze neni na tohle uplne prakticka.
Tak nad tim mas dve dalsi naprosto trivialni moznosti, ktere jsou pro mensi projekty naprosto dostacujici. Na maly projekt je gettext rekl bych skoro overkill.
Ahoj, mám dotaz ke stejnému tématu. Mám hotový web ve flashi, který čte všechen text z externího XML souboru. (ten web sem nedelal ja), potřeboval bych jej zeditovat tak aby šlo pomocí tlačítek změnit jazyky. Tedy měl bych víc XML každý v ruzne jazykove verzi a ty by se načítali podle toho jaké tlačítko by se zmáčklo v te flashove animaci (webu). Zní to docela jednoduše, ale nevím jak to provést. Pomohl by mi prosím někdo?
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Lokalizace programu — založil paashi
Lokalizace comboboxu — založil marpit
Lokalizace programu — založil paashi
Lokalizace data — založil Vitek
Lokalizace WCF — založil Jan Grygerek
Moderátoři diskuze