PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: kalev_arn 2008-01-02 15:18:32
Tere,

mis arvate kui ma teeksin ühe kolmekeelse e-poe. Millel saaks olema 3-e keele peale igat HTML-i üks ja seal kus peaks olema blank lehe tekst võetakse see PHP funktsiooni $sona->sona($sõna number,$keel) abil SQL tabelist.

SQL tabel näeks välja järgmine
|id| - |et| - |en| - |ru|
| 1| - |sõna eestikeeles| - |sõna inglise keeles| - |sõna venekeeles|

Kas see võiks muuta lehe piisavalt aeglaseks või need päringud ei tohiks olla liiga aeganõudvad.
RE: Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: rtfm 2008-01-02 15:31:46
otsi siit foorumist erikeelsuse teemasid, seda on põhjalikult nämmutatud siin
RE: Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: kalev_arn 2008-01-02 16:21:30
TSITEERITUD:
otsi siit foorumist erikeelsuse teemasid, seda on põhjalikult nämmutatud siin


Aitäh vihje eest, otsisin ja kammisin päris mitu lehekülge neid erikeelsuse teemasi. Ja leidsin palju huvitavat aga konkreetse dünaamika kohta ei leidnud sõnagi.

Kalev
RE: Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: MeiX 2008-01-02 16:24:38
Ära iga sõna pärast nüüd küll päringut tegema hakka. Kõige lihtsam viis - kirjuta oma stringid ini faili ja siis tee parse_ini_file nende sisselugemiseks.
RE: Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: mrq 2008-01-02 16:24:40
TSITEERITUD:
otsi siit foorumist erikeelsuse teemasid, seda on põhjalikult nämmutatud siin
Leidsin mitte midagi.

  • Keelte lühendiks on soovitav kasutada kahekohalist keele või regiooni tähist ISO 639-1 standardile vastavalt link: http://www.loc.gov/standards/iso639-2/php/code_list.php nt. järgnevalt "et, en, ru, fi" jne.
  • Vaikimis keele võid võtta kasutaja sirvija parameetrist $_SERVER['HTTP_ACCEPT_LANGUAGE'], kus aga võib olla komadega eraldatud mitu erinevat keelt ja lisaks veel võivad olla keelde en-us jne, mis võivad mitte sobida, kui kasutatakse ainult 2 kohalist keele tähist.
  • Algkeel millest tõlgitakse võiks olla inglise keel aga see on maitse asi.
  • Tõlkimise funktsioon võiks olla lihtne kasutada. Funktsioon võiks ise valitud keele leida. Näide:

    PHP kood:
     
    <?=t('Cancel');?>

  • Isiklikult ei näe eesmärki määrata tõlkes kategooriat või konkteksti. Pikemad tekstid või erinevate kontekstide jaoks võid kasutada erinevaid eesliideseid ja lõppe ehk "User cancel", "Update", "Updated". Aga seda on siis vaja, kui on vaja hoida mingeid tõlkeid eraldi ja neid importida või exportida ja mitte kogu tõlkebaasi korraga.
  • Tühikud võivad olla sõnade eralduseks. Hetkel ei tule endal vastuväiteid pähe.
  • Tõlked võiksid olla andmebaasis, et oleks võimalik teostada kiiremini tõlget või andmebaasi välja uuendamist. Muidu on lihtsalt vaja ennem leida mingi keelele vastava sõna veerg ja see uuendada.
  • Iga sõna võiks olla defineeritud ühe reaga id, sõna, tõlge, keel. Saab selekteerida korraga konkreetse keele, sõna või tõlke.
  • Kiirendamiseks võib ehitada erinevaid cachemise viise. Salvestades tõlked või keele baasid kuhu faili või mingisse globaalsesse muutujasse kust hiljem pärida. Tasub korraga terve keel sisse laadida ja siis üksipulgi küsida nt.

    PHP kood:
     
    $t
    ['foo'] = 'Pähh';
    $t['Hello'] = 'Tere';
    function 
    t($word)
    {
       global 
    $t;
       if(isset(
    $t[$word]))
       {
         return 
    $t[$word];
       }
       return 
    $word;
    }



Vot sellised mõtted siis :)

Viimati muudetud: 02-01-2008 16:31:12
Muutja: mrq
Põhjus:

RE: Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: axelpaan_ 2008-01-02 17:45:02
mrq seletas väga hästi.

omaltpoolt lisaks mõtlemisteemana asjaolu, et erinevates keeltes on erinev lauseehitus ja seega võib tekkida olukord näiteks mingi selline:

ee "Näitan 66-st leheküljest lehte nr 7".
en "Displaying page 7 of total 66 pages".

väga keeruline on nüüd tõlketabelisse tõlkeid sisestada.
Ühe tervikuna on keeruline sest sisaldab muutujaid.
Eraldi:
Näitan -> Displaying page
leheküljest lehte nr -> of total
... -> pages

ja numbrid on erinevas järjekorras...blaah


Seega tõlkestringi peaks sisestama võibolla mingid märgendid.

"Näitan %1-st leheküljest lehte nr %2."
"Displaying page %2 of total %1 pages."

Ja templiidis, või kus iganes tõlget näidatakse
<?=t('mingiid', $argument1, $argument2);?>


vt ka sprintf funktsiooni









RE: Kolme keele jaoks 1ks HTML ja iga sõna võetakse SQL-ist $sona->sona(1,et) / $sona->sona(3,en) jne?
Postitaja: aksel 2008-01-02 18:39:13
TSITEERITUD:

"Näitan %1-st leheküljest lehte nr %2."
"Displaying page %2 of total %1 pages."

Ja templiidis, või kus iganes tõlget näidatakse
<?=t('mingiid', $argument1, $argument2);?>


vt ka sprintf funktsiooni


Ei ole ilmselt mõtet ise aretama hakata mingeid asendusi, vaid tulekski kohe mõelda sprintf peale:)

Lisaks, andmebaasist:
mina hoiaks (hoiangi) tõlkeid kahes tabelis. Tegelikult keeletabel tuleb ka juurde. 3 siis.

Tabelid ja väljad (lühidalt)
language
ID
Name

resource
ID
Name
Value

resourceitem
ID
LanguageID
ResourceID
Value

Value väli tabelis resource võiks olla nagu default väärtus, mis kuvatakse siis, kui tõlge puudub. Samas võib default väärtusena kasutada ka võtit, mis antakse parameetrina tõlget välja kutsuva funktsiooni sisendisse.

Tõlke kuvamise kohta oli eespool juba hea näide, kordamine on tarkuse ema:

<?=rs('Võti_mis_on_resource_tabelis_Name')?>


Keele parameeter võetakse sessioonist, sest antud kasutaja keel on sessioonis paigas mul.
Loomulikult ei käi sa tõlkeid lugemas neid baasist iga requesti korral, vaid ainult esimest korda, kui antud tõlged küsitakse. Ja siis cache'id tõlked sessiooni. Või isegi aplikatsioonitasemel (kui kõik kasutajad näevad samu asju jne).
Lisaks on sul tabelid korralikult indekseeritud, onja:)

Lisaks on mul tehtud nii, et kui rs('tundmatu_võti') teeb päringu võtmega, mida baasis pole, siis see pannakse kirja tabelisse resource, aga ilma tõlgeteta. St et resourceitem tabelisse ei kirjutata midagi. Kui nüüd saidi haldaja läheb haldusvahendisse tõlkeid kontrollima, siis on tal seal kohe ilusti näha tõlked, mis on puudu. Samuti võib puudu olevate tõlgete peale saata e-mailiga mingi teate vms.

Ja head uut aastat ka!:)

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0858998298645