Dictionary – překladač
- h4kuna
- Backer | 740
Zdravim v jednom prispevku jsem cetl „konkurence neuskodi“ napsal jsem si vlastni prekladac textu.
- staci pouze načíst tridu Nette\Object a rozhrani Nette\ITranslator at uz manualne nebo za pomoci autoloadingu
- doporucuji po stazeni precist textak „readMe.txt“
- lze vyuzivat s databazi nebo bez ni (k databazovemu uziti chybi GUI)
- podporuje plural
- vyuziva session z Nette
- ke stažení
- samotne spusteni je v Dictionary.php avsak to tu popisu
<?php
$lang=null;
if(isset($_GET['lang']))
{//zalezi na vas jak budete prijimat jazyk, zde je to naznacene pres GET
$lang =$_GET['lang'];
}
$language =TranslationDB::loadDictionary($lang);//verze pro databazi
//$language =Translation::loadDictionary($lang);//verze bez databaze
//v temp/lang se vytvori slovniky ktere dedi tridu TranslationDB
//pro verzi bez db si soubory musite vytvorit sami a dedit tridu Translation
//pokud si dobre vsimnete vzniknou metody a kazda vraci pole, podle nazvu metody si
//nactete slova ktera opravdu pouzijete a nemusite nacitat spousty neposdstatnych slov
$language ->mergeWords('formular');
$language ->mergeWords('title');
//je na vas jak si to sikovne rozdelite do skupin :)
//metoda ktera se nacita pokazde se jmenuje "globalWords" pro slova,
//ktera pouzijete vzdy napr pro preklad menu
//je potreba nastavit pro voleni v sablonach
$this->template->setTranslator($language);
?>
volani v sablone
<?php
<h1>{_'dog', 1} {_'dog', 2} {_'dog', 5}</h1>
?>
- lze pouzit v prekladech %i, %s
- (‚%i psů‘, 5) → vysledek 5 psů
- vice php.net
mimo sablony
<?php
$language->translate('dog', 2);
?>
je potreba dat pozor na:
klic v poli se sestavuje dog1(jeden pes), dog2(dva psi), dog(vse ostatni) avsak v sablone se cislo u klice neudava jako je to v ukazce
Editoval matata (23. 8. 2009 20:42)
- ic
- Člen | 430
No pěkná věc, akorát se pořád nějak nemůžu ztotožnit
s předáváním identifikátoru jazyka pomocí session, myslím že řeč by
bylo lepší předávat v url, takhle odeslané odkazy budou v defaultní
řeči pokud odesílatel nebude odkaz odesílat prozřetelně i s pomocí
?lang=...
. Nemluvě o problémech s prohlížeči které session
z nějakého důvodu neuloží.
- h4kuna
- Backer | 740
ic napsal(a):
No pěkná věc, akorát se pořád nějak nemůžu ztotožnit s předáváním identifikátoru jazyka pomocí session, myslím že řeč by bylo lepší předávat v url, takhle odeslané odkazy budou v defaultní řeči pokud odesílatel nebude odkaz odesílat prozřetelně i s pomocí
?lang=...
. Nemluvě o problémech s prohlížeči které session z nějakého důvodu neuloží.
lze jak pomoci session tak pomoci GET (url), kdyz neni vyplneny GET vyvola se zaznam ze session, to si volis co predas vznikajici instanci
kdyz budes mit v url /cz/…neco… tak si vytahnes hodnotu cz z url a predas ji do instance
Editoval matata (28. 8. 2009 12:07)
- h4kuna
- Backer | 740
johny napsal(a):
Ahoj, jen ze zvědavosti, jaký výsledek vrátí pro počet 21 a pro 23?
21 psů
23 psů
ridi se to podle tehle metody
<?php
public function czechDeclension($count)
{
$count =abs($count);
switch ($count)
{
case 1:
$count =1;
break;
case 2:
case 3:
case 4:
$count =2;
break;
default:
$count =null;
break;
}
return $count;
}
?>
jen jsem nevěděl jestli má být 2.5 psa nebo 2.5 psů???? kazdopadne to vrati psů :D
pro zmenu kdyz tam dosadim cloveka tak mi lip sedi 2.5 lidí nez 2.5 lidi
Editoval matata (28. 8. 2009 19:29)
- h4kuna
- Backer | 740
Tomik napsal(a):
matata napsal(a):
pro zmenu kdyz tam dosadim cloveka tak mi lip sedi 2.5 lidí nez 2.5 lidi
Nechci šťourat, ale když už nemělo by tam být 2.5 člověka? :)
Klidne stourej ja fakt nevim… ikdyz clovek je jen jeden, to by chtelo cestinare…
Kazdopadne co si mas presdstavit pod obojim??? :D
Chtelo by to dosati podstatny jmeno, ktery jde rozdelit na desetiny.
Editoval matata (30. 8. 2009 0:06)
- h4kuna
- Backer | 740
Tomik napsal(a):
Nechci šťourat, ale když už nemělo by tam být 2.5 člověka? :)
Nasel jsem specifikaci jak se sklonuje ve vsech statech, podle toho co tam pisou by to bylo 2.5 lidí budu se drzet tohoto ovsem vyjimky muzou byt :)
Husty to maj Arabove
Editoval matata (30. 8. 2009 13:12)
- Tomik
- Nette Evangelist | 485
matata napsal(a):
Nasel jsem specifikaci jak se sklonuje ve vsech statech, podle toho co tam pisou by to bylo 2.5 lidí budu se drzet tohoto ovsem vyjimky muzou byt :)
No, to nepovažuju za zákonodárný… :) Přeci jen český/slovenský
jazyk je natolik komplexní, že si jen těžko představit, že by nějaký
anglický standard mohl určit co je, a co není dobře. Ale našel jsem toto:
http://www.ujc.cas.cz/…ni/index.php?… … hledejte dotaz
týdne 22/2008 – desetinná čísla, je tam
řečeno, že není přímo stanoveno, co je nutné použít, zda
2,5 kilometru, nebo 2,5 kilometrů
, z toho, co se tam píše, jsem
pochopil, že u menších číslovek je asi přirozenější používat
jednotné číslo, u větších to množné, ale je možné používat obojí
v obou případech. Bude tedy asi z hlediska „výpočetní síly“ lepší
používat množné číslo… :)
Ale stejně jako kravčo bych selským rozumem řekl
2,5 hrušky
. :)
- Jakub Šulák
- Člen | 222
Podle definice Příručky ÚJČ AV, je to následovně:
Shoda počítaného předmětu po desetinných číslech se v odborných textech řídí podle desetin, setin atd. Tvar počítaného předmětu je proto ve 2. p. j. č.: 1,1 metru, 1,2 metru, do 1,2 metru, skočit 1,3 metru, 2,4 litru, do 3,5 tuny, 10,548 milionu, 14,25 sekundy (čteme: jedna celá dvě desetiny metru, do dvou celých dvou desetin metru…).
V neodborných či stylově nižších textech se často objevuje počítaný předmět po desetinných číslech i ve tvaru 2. p. mn. č. nebo se zde uplatňuje pádová shoda podle číslovky nacházející se za desetinnou čárkou. Tento způsob lze zvláště v mluveném projevu tolerovat: 1,1 metrů/metr, 1,2 metrů/metry, do 1,2 metrů, skočit 1,2 metrů/metry, 2,4 litrů/litry, do 3,5 tun, 10,548 milionů, 14,25 sekund atd.
Takže i toto je určitým směrem kodifikováno.
- h4kuna
- Backer | 740
Tomik napsal(a):
Bude tedy asi z hlediska „výpočetní síly“ lepší používat množné číslo… :)
Jakub Šulák
Takže i toto je určitým směrem kodifikováno.
Tento způsob lze zvláště v mluveném projevu tolerovat: 1,1 metrů/metr, 1,2 metrů/metry, do 1,2 metrů, skočit 1,2 metrů/metry, 2,4 litrů/litry, do 3,5 tun, 10,548 milionů, 14,25 sekund atd.
Me prave prislo ze jsem slysel i to i to 2,4 litrů/litry
<?php
/**
* urci slovo pro ceske/slovenske sklonovani
* @param float $count
* @return int
*/
public static function czechDeclension($count)
{
/*
switch ($count)
{
case 1:
$count =1;
break;
case 2:
case 3:
case 4:
$count =2;
break;
default:
$count =null;
break;
}*/
$copy =(int)$count;
if( (int)$count == $count)
{
$last =substr($count, -1);
switch($last)
{
case 1:
$count =1;
break;
case 2:
case 3:
case 4:
$count =2;
break;
default:
$count =3;
break;
}
}
else
{
$count =null;
}
return $count;
}
?>
Je potreba si vybrat jednu variantu a tu dodzovat.
- h4kuna
- Backer | 740
ic napsal(a):
Tak tímto bude obstojeně zvládnutý plurál v češtině a možná i slovenštině… vzhledem k tomu jak nejasné je to v naší mateřštině mnohem složitější to bude v ostatních jazycích… nebo je třeba angličtina skutečně tak jednoduchá jak se tváří? žádné vyjímky?
V tuto chvili delam novou verzi pro prekladani a metody na sklonovani budou volany jako callback, v teto stavajici verzi to neni jeste implementovane, ale je to uz vyresene :) Takze co jazyk to moznost nastavit sklonovani.
vyvojova verze ke staženi
Editoval matata (31. 8. 2009 11:09)