ray Posted January 17, 2007 Report Share Posted January 17, 2007 Es gribētu zināt pēc jūsu pieredzes, kā vislabāk ar php taisīt lapu ar vairākām valodām. Iepriekš taisīju tā, ka datubāzē katram ierakstam bija lv un en tulkojums, piem, lv:forums > en:forum un ar sesiju (piem., sesija("lv_valoda")) un funkcijas palīdzību no datubāzes paņēmu vajadzīgo ierakstu, bet šaubos vai šis būtu vispareizākais variants, tāpēc gribētu zināt labāku. Link to comment Share on other sites More sharing options...
Delfins Posted January 17, 2007 Report Share Posted January 17, 2007 (edited) Katrai lietai ir sava pieeja. Ziņām tā būtu kā unikāls ieraksts (vai arī taisīt `ziņas` un to `tulkojumi` ) Produktiem tie būtu vienkārši kā tulkojumi... un ja parametrus taisa kā opcijas, tad opciju nosaukumi glabājās atseviškī 1.) N-ierkasti (tavējais) 2.) Kopējā tabula Translation (TableId, FieldId, RefId, LangId, Translation) [vienmēr ir joinojama] 3.) Katrai valodai sava bāze/tabula (Postgre atļauj inheritance, tāpēc tur mazākā sāpe) Atliek noskaidrot, ko tu gribi tulkot. Pateikt "Vot es gribu mazu google vai amazon.com" ir viegli. Edited January 17, 2007 by Delfins Link to comment Share on other sites More sharing options...
andrisp Posted January 17, 2007 Report Share Posted January 17, 2007 Interfeisa tekstus var turēt teksta failos kā mainīgos, piem., lang.lv.php: $texts['ok'] = 'Viss ir ok'; $texts['not_ok'] = 'Notikusi kļūda!'; $texts['bla'] = 'Bla bla bla!'; Angļu valodai cits fails ar tulkotiem tekstiem. Pēc tam atkarībā no izvēlētās valodas inkludojam attiecīgo failu. Lai izdrukātu šos tekstus, izveidojam speciālu fju, kas, piem., tiek izsaukta get_text('ok');. Šajā fjā sarakstam, ko darīt, ja nav atrasts mainīgais (tad, piem., ņemam tulkojumu no kaut kādas defaultās valodas). Šo var attīstīt arī tālāk, ka var padot fjai mainīgos, kas tiks ievietoti izdrukājamajā rindā. Piem., get_text('cena', array(12, 14)). Valodas failā, piem., $texts['cena'] = 'Parastā cena ir {2}, bet jums cena ir {1}'; Datubāzē var darīt, piem., šādi: article: id | date | u.c. vispārīgi lauki, kas ir kopīgi visām valodām article_texts: id | article_id | lang | title | text Šādi varēs vienot cik vien valodas gribi klāt. Link to comment Share on other sites More sharing options...
v3rb0 Posted January 17, 2007 Report Share Posted January 17, 2007 php.net/gettext komplektā ar poedit Link to comment Share on other sites More sharing options...
cucumber Posted January 17, 2007 Report Share Posted January 17, 2007 Es uztaisitu atsevishki katrai lapai savu mapitei ar valodu. (Tas der ja vajaga tikai mainit lapas valodas, bet ja ir jaunumi etc, tad vajaga glabat ierakstos ar attiecigam valodam) Link to comment Share on other sites More sharing options...
Analgiins Posted January 18, 2007 Report Share Posted January 18, 2007 Ja par piemēru ņemam "raksti", tad es lietotu šādu variantu tabulai: article_id | title_lv | title_ru | title_en | text_lv | text_ru | text_en attiecīgi pēc valodas skatamies, kuru rakstu ņemt. $qry = sprintf("SELECT article_id, title_%1\$s AS title, text_%1\$s AS text FROM articles", $lang_prefix); Link to comment Share on other sites More sharing options...
andrisp Posted January 18, 2007 Report Share Posted January 18, 2007 Šis droši vien ir daudz ātrāks variants, bet nav tik fleksibls. Link to comment Share on other sites More sharing options...
Analgiins Posted January 18, 2007 Report Share Posted January 18, 2007 un glabāt daudzvalodu tekstus failos ir daudz fleksibilāk? :) Un ja nepieciešams uztaisīt interfeisu priekš lietotājiem (da arī priekš sevis), lai viņi paši varētu mainīt šos rakstus, frāzes, nosaukumus vairākās valodās, tad mācīsi viņiem uz servera atvērt pareizo failu un tur mainīt tekstus? :) Link to comment Share on other sites More sharing options...
andrisp Posted January 18, 2007 Report Share Posted January 18, 2007 Taisnība taisnība :), bet parasti (vismaz cik man ir pieredze) reti kad vajag iespēju klientam labot interfeisa tekstus. Link to comment Share on other sites More sharing options...
nemec Posted January 18, 2007 Report Share Posted January 18, 2007 prieksh intrefesa var jau izveidot arii tabulu `interfeiss`, un tur glabaat mainiigo un cilveek atshifreejamo (ja jau grib prastu variantu interfeisa tulkoshanai). bet visu tulkot man patiik ar delfiina 2. teikto variantu. Katrai lietai ir sava pieeja. Ziņām tā būtu kā unikāls ieraksts (vai arī taisīt `ziņas` un to `tulkojumi` ) Produktiem tie būtu vienkārši kā tulkojumi... un ja parametrus taisa kā opcijas, tad opciju nosaukumi glabājās atseviškī 1.) N-ierkasti (tavējais) 2.) Kopējā tabula Translation (TableId, FieldId, RefId, LangId, Translation) [vienmēr ir joinojama] 3.) Katrai valodai sava bāze/tabula (Postgre atļauj inheritance, tāpēc tur mazākā sāpe) Atliek noskaidrot, ko tu gribi tulkot. Pateikt "Vot es gribu mazu google vai amazon.com" ir viegli. vari luudzu mineet piemeeru, kaa tu izmato sho tabulu tulkoshanai. man ir taada funkcija uzrakstiita, bet man ir paaraak daudz selectu. man pasham liekas, ka tas ir pats labaakais variants. Link to comment Share on other sites More sharing options...
andrisp Posted January 18, 2007 Report Share Posted January 18, 2007 (edited) Neesmu nekad veidojis neko līdzīgu 2 variantam, bet liekas, ka vajadzētu pietikt ar kaut ko līdzīgu šim: function get_translation($table_id, $field_id, $lang_id) { $sql = " SELECT translation FROM `translations` WHERE table_id = '".$table_id."' AND field_id = '".$field_id."' AND lang_id = '".$lang_id."' LIMIT 1 "; $result = mysql_query($sql); if (mysql_num_rows($result) > 0) { $row = mysql_fetch_row($result); } if (!empty($row[0])) { return $row[0]; } return false; } Edited January 18, 2007 by andrisp Link to comment Share on other sites More sharing options...
nemec Posted January 18, 2007 Report Share Posted January 18, 2007 Nevajag taisīt muļķīgas QUOTEs (bubu) nu vot un sanaak daudz selektu. ja tev vajag izvilkt 10 zinju nosukumus un peec tam iztulkot. Link to comment Share on other sites More sharing options...
ray Posted January 18, 2007 Author Report Share Posted January 18, 2007 (edited) mans ir šāds variants: tabula tulkosana (id | tulkojamais | lv | en) piemēram tabulas ieraksts: 1 | jaunumi | Jaunumi | News $_SESSION['valoda'] = 'lv'; function tulkosana($teksts) { $query = "SELECT * FROM tulkosana WHERE tulkojums= '$teksts'"; $result = mysql_query($query) or die (mysql_error()); while ($output= mysql_fetch_array($result)) { echo $output[$_SESSION['valoda']]; } } <? tulkosana('jaunumi'); ?> Edited January 18, 2007 by ray Link to comment Share on other sites More sharing options...
v3rb0 Posted January 18, 2007 Report Share Posted January 18, 2007 ray, tas bija piemērs kā nevajag taisīt tulkošanu? nepietiek ar to ka, uz katru labeli griezies pie db,vēl no db velc ārā tulkojumu visas iespējamās valodās, bet paņem tikai vienas valodas tulkojumu. priekš kam tur cikls īsti nezinu, bet diez vai gribi lapā redzēt 3x iztulkotu vārdu 'jaunumi' :p Link to comment Share on other sites More sharing options...
hmnc Posted January 18, 2007 Report Share Posted January 18, 2007 lapā noteikti ir kādi 666 pieprasījumi :D muehheh Link to comment Share on other sites More sharing options...
Recommended Posts