Autor Zpráva
slovakCZ
Profil
Ahoj,

mám takový dotaz, chci na webu udělat fci více jazyků ale nyní řeším, jak přeložit statické informace (tlačítko Odeslat u formuláře, chybové hlášky atd atd).. Nerad bych používal databázi, celkem se mi líbí řešení pomocí polí, ale nevím si radu, jak do chybové hlášky předat nějakou proměnnou. Ukáži na ukázce:

cz_translate.php
<?php
$lang = array(
"send" => "Odešli", 
"delete" => "Smaž");
?>



inde.php
<?php
include $language;
echo $lang["send"];
?>


Na stránku mi to vypíše: Odešli. když includuju soubor en_language.php kde mám jiné překlady tak mi to na stránku vypíše Sent.. což je myslím jasné.. ovšem rád bych, aby to vypisovalo například: Odešli formulář REGISTRACE. Myslel jsem, že by to mohlo fungovat nějak tak, že bych zavolal
$lang["wrong_email"]($param1, $param2); //samozrejme nesmyslny zapis, jde mi o to abych mohl danemu prekladu predat nejake promenne ve kterych bude text a ty se pote v chybove hlasce zobrazili tam kde maji

a poté by se volalo něco takového:
$lang = array(
"wrong_email" => "Pole %param1 u formuláře %param2 bylo zadáno chybně");



Děkuji za rady

Lze udělat něco takového? V případě, že ano, můžete mě "nakopnout" nebo rovnou opukázat prosím na nějaké řešení? Rád bych
Neas
Profil
nejsem si jist, jestli jsem správně pochopil dotaz, chceš něco takového?
"wrong_email" => "Pole " . $param1 . " u formuláře " . $param2 . "bylo zadáno chybně");

tečka = spojování řetězců, podobně jako v jiných jazycích se často objevuje "+".
Tomashekk
Profil
slovakCZ:
já to řeším nějak takto

jazyk.php
<? 
define("send","Odeslat");
define("reply","odpovědět");
.......
?>

a po té si to např. v index.php vypisuju takto
<? echo send;
echo reply; 
?>

a poté spojovat řetězce jak píše Neas
slovakCZ
Profil
Ok dekuji chlapi.. je videt ze premyslim moc slozite a tak trivialni reseni me ani nenapadlo... :)
Tori
Profil
A co gettext? Vizte článek na Intervalu. Je i varianta php-gettext, kterou není potřeba kompilovat s php, dá se použít rovnou.
slovakCZ
Profil
Neas:
ted jsem si uvedomil, asi to neni to co jsem chtel... jak propasuju pozadovane promenne $param1 a $param2 do pole?
jazyk.php
$lg = array(
    "send" => "Odešli $form",
    "delete" => "Smaž"
);


index.php
<?php
include "jazyk.php";
$form = "Testovaci nazev formulare";
echo $lg["send"]; // vypise jen Odešli
?>
slovakCZ
Profil
Tori:
tak jsem si stahl php-gettext a vzpada to celkem dobre.. funguje to ale neni mi moc jasne, jak si pridam nove preklady do soubory *.po... editor pro editaci po souboru mam, ovsem neumoznuje mi pridavat nove "radky prekladu"
blaaablaaa
Profil
slovakCZ:
Nove vyrazy si vytahnes automaticky ze zdrojovych souboru.
slovakCZ
Profil
blaaablaaa:
TOmu moc nerozumim, co mam chapat jako zdrojovy soubor?...

mam napr soubor index.php, kam jsem pridal:
echo T_("Výběr jazyka");
a nyni mam soubor czech.po a czech.mo a do souboru czech.po nejsem schopen pridat novy radek pro preklad "Výběr jazyka". Jak tedy aktualizuji (a podle ceho) soubor czech.po? Ani v napovede programo Poedit jsem poradne nic nenasel.

Dekuji za radu..

Tom

//EDIT:
aha, tak uz to vidim, je tam tlacitko Aktualizovat katlaog - synchronizuje se zdrojovymi kody.. ovsem mam ho zasedle a nemuzu na nej kliknout.. asi nejdrive musim zadat cestu k php souborum, snad to nekde najdu, s tim bych si uz mel poradit. ;)
slovakCZ
Profil
tak nastavene to mam, soubor po se mi aktualizuje, ovsem neni mi jasne nastaveni pluralu... pro priklad mam takovyto php kod: (z demo souboru):
print sprintf( T_ngettext("%d pig went to the marketa\n","%d pigs went to the market\n", $number), $number );

a v Poedit potrebuji nastavit, aby to bralo v uvahu i plural tohoto prekladu a to mi nejak nefunguje. Jak pro takovyto vyraz nastavit pravidlo pluralu prosim?
joe
Profil
Udělal bych to tak nějak, jak jsi navrhoval původně. Bez použití gettextu, nepoužívám to.

Ale s tím rozdílem, že bych to dal do třídy, třeba nějak takto:

class Language_cs {

private $translates = array(
'wrong_email' => 'Pole %p u formuláře %p bylo zadáno chybně',
...
);

public function get($value) {
if(isset($translates[$value]) {
// tady bych zkontroloval, jestli překlad má v sobě nějaký výskyt %p, počet výskytů spočítám a porovnám s počtem argumentů této metody, co vrací funkce func_num_args(), samotné argumenty pak funkce func_get_args() a pak už jenom atributy zaměnit postupně za %p
}

new ..Exception();

}

}
slovakCZ
Profil
jee, me ten gettext zacal fungovat.. i pluraly jdou v poradku :) kazdopadne dekuj za tip na jine reseni, urcite se bude hodit kdyz nebudu chtit vyuzit gettext.. ted jsem ovsem konecne prisel na to jak gettext nastavit a vypada to, ze to je slusna pomucka, uvidim jestli nenajdu nejaky problem zase ;)
joe
Profil
Ale gettext je určitě lepší, já to spíš mám přes vlastní řešení s databází nebo v jednotlivých šablonách, které se pro daný jazyk mohou trochu lišit a kde jen změna textu nestačí... tak proto jsem to ještě nikdy nepoužil.
slovakCZ
Profil
jo tak, ok... no kazdopadne pro nejake male stranky je asi zbytecne pridavat cely gettext, tve reseni bude mozna jednoduzsi a rychlejsi... jak jsem na to koukal, tak to vypada ze to bude fungovat hezky, skript si ukladam a snad se jednou bude hodit ;) Dekuji za ochotu!!!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0