Jump to content
php.lv forumi

jūsu domas par šo multilanguage sistēmu ..


millers

Recommended Posts

  • Replies 31
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Es kad taisīju multi-valodu, tad visādos sīkās vārdus, frāzes glabāju masīvā, failā. Datubāzē glabāju lielākus tekstu gabalus, tā kā tavā dotajā linkā pa kolonnām...

 

$lang_arr['ru']['hello'] = "Privet!";
$lang_arr['lv']['hello'] = "Sveiki!";
$lang_arr['en']['hello'] = "Hello!";

$lang = "lv"; //ru, lv, en

$l = $lang_arr[$lang];

echo $l['hello'];

 

Nedomāju, ka ir īpaši labāki veidi...

Link to comment
Share on other sites

Runājot par masīviem - iedomāsimies, ka mums ir lapa, kur ir ~1500 stringu (ņemu par piemēru vienu no savām lapām). Tas tagad nozīmē, ka katras lapas sākumā jāiekļauj masīvs ar 1500 ierakstiem. No atmiņas un resursu viedokļa tas varētu nebūt ideāli. Vēl, protams, ir jautājums, kā organizēt masīvu tulkošanu - kādam noteikti aizmirsīsies kāds ieraksts kādā no valodām un izmantojot masīvus, grūti izdomāt, kuri stringi lapā nav notulkoti. Protams, vienreiz tulkojot tas ir vienkārši, bet pieņemsim, ka lapa nepārtraukti mainās (kura gan nemainās) un kādi 3-4 tulkotāji strādā paralēli...

 

Par gettext - jāņem vērā, ka mainot tulkojumus, jāpārstartē Apache. Tas attiecīgi nozīmē, ka vajag atsevišķu serveri, jo šārēta hostinga gadījumā neviens netaisās restartēt Apache katru reizi, kad tiek uzlabots tulkojums (piemēram, 5x dienā).

Edited by black
Link to comment
Share on other sites

Nu tad var provēt ielādēt no db tajā masīvā, atkarībā no kontekta. (Vai tad katrā lapā būs pa 1500 ierakstiem?)

 

To var, bet tad jāpadomā, cik būs kontekstu. Katrai lapai savs vai pa lapu grupām? Kā tiks nodrošināts tas, ka kontekstu vērtības nepārklājas (piem. Username tulkojums var parādīties gan reģistrācijas, gan administrēšanas lapās). Tas, savukārt, izskatās pēc samērā nopietnas datubāzes. Piedevām, parādās jautājums par to, vai nolasīt 100 ierakstus no datubāzes (DB serveris parasti ir uz cita datora) ir ātrāk, nekā iekļaut 1500 stringu masīvu.

Link to comment
Share on other sites

Es dariju shadi:

Katrai valodai veidoju savu failu, kura ir tas pats masiivs:

tas tika dariits lai samazinatu masiiva apjomu ( nav dubultais/triskarshais, vai nedod dies'5 un vairakkartiigs)

Faila nosaukum iekljaujot eng/ ru / lv etc ttieciigi nepieciesamo ( piem. langu_eng.php ) attieciigi includo nepieciesmo valodu.

Ja ir liels datu apjoms ( daudz lapas) tad

1. reali atlasa potenciali tos vardus kas buus lielk dalj lapu, un toos includo jau indexaa

2. visus kljudas/Ok. pazinjojumus atseviskji

3. parejam lapam incluudo peec lapu grupas ( parasti teiksim ir kadas lielakas sadaljas, Raksti/joki etc ...)

Protams pastav iespeja kad kada masiva dalja nodublesies, bet nu arii 1500-2000 nav tik taraki lai nevaretu izsekot liidz.

--

Lai noteiktu kur kas nav iztulkots ( ielikts vajadzigais mainigais) daros shadi , izveidoju 1 valodu, parejos tukshus failus, parsledzos uz valodu kurai vel nav izveidots masiivs, un atri vien var redzet ja kautkur , kas truukst.

 

Glabajot atseviskja falaa katru valodu ir velviena pozitiva lieta --> var dood tulkot tekstus cilvekam kursh ir stipri attalu no programmesanas, bet labi parzin doto valodu , tik vieniigi jaiemaca rikoties ar primitiivu text redaktoru ( UTF-8 delj), un japaskadro ka MASIVU nevajag tuulkot ( tikai to kas ir aiz = zimes,

---

Protams nesaku ka shis nu buutu labakais risinajums , bet tikai viens No...

Link to comment
Share on other sites

Datus glabā datubāzē, uzbūvē editoru, kas labo datubāzes datus + export skripts, kas saglabā datus atkarībā no moduļa(konteksta) failos ar var_export($module_texts, 1).

Katrai valodai un katram modulim savs fails + pa virsu tam PHP klase, kam tu prasi tulkojumu no konkrētā moduļa. Ja modulis netiek izmantots, arī fails ar nodefinēto masīvu netiek iekļauts. Ja kādā valodā kāds teksts nav iztulkots, tad to mierīgi ar PHP līdzekļiem var pārķert.

Link to comment
Share on other sites

...

Par gettext - jāņem vērā, ka mainot tulkojumus, jāpārstartē Apache. Tas attiecīgi nozīmē, ka vajag atsevišķu serveri, jo šārēta hostinga gadījumā neviens netaisās restartēt Apache katru reizi, kad tiek uzlabots tulkojums (piemēram, 5x dienā).

 

Var arī bez tā iztikt, ja izmanto kaut kādu šādu workaroundu - http://blog.ghost3k.net/articles/php/11/gettext-caching-in-php

Vienīgi tad nedrīkst aizmirst patīrīt no vecajiem failiem, lai neveidotos pārāk liela miskaste.

Link to comment
Share on other sites

Man arī šobrīd šī lieta ir aktuāla.Uzrakstīts ir stipri līdzīgi Grey_Wolf aprakstītajam variantam.Manuprāt ļoti ērts risinājums-valodas glabāt ne tikai katru savā 1 failā,bet atvēlēt viņām savu folderi(lv,eng,ru u.t.t),kuros glabāt vairākus txt failus ar frāzēm,kuras ir atbilstošas tekošajiem failiem.Tad tikai atliek no sesijas vai settingiem nolasīt valodas kodu,un izsaukt:

if(file_exists(site_path.'/languages/'.$language.'/'.$template.'.php'))
  include 'languages/'.$language.'/'.$template.'.php';

 

Bet tas ko gribēju pie reizes uzjautāt,kā būtu labāk glabāt "lielos" sadaļu datus,kurus nebūtu prāta darbs stūķēt masīvos.Saitā jau katrai lappusei jau ir arī intro,content,un cits info,kas tiek lasīts no datubāzes.Kāds būtu optimālākais variants mysql pusē?

* Taisīt katrai valodai savu tabulu ar valodu prefiksiem nosaukumā?

* Glabāt tajās pašās,bet dublēt kolonnas: lv_content,eng_content u.t.t?

* Katrai valodai vispār savu db?

* Varbūt lielo kontentu arī pa folderiem vienkārši iemest vienā .txt failā un kā include?

Kādi vēl varētu būt varianti? Realizējami būtu visi,bet negribētos uzrauties uz kaut ko neizdomātu,kas baigi varētu vēlāk iegriezt :)

Edited by 404
Link to comment
Share on other sites

kā būtu labāk glabāt "lielos" sadaļu datus,kurus nebūtu prāta darbs stūķēt masīvos.Saitā jau katrai lappusei jau ir arī intro,content,un cits info,kas tiek lasīts no datubāzes.

Nee lielus text gbalus netmaksajas glabaat masiivaa

--

parasti jau konkretam saitam valodas nenaak klaat ( ja arii nak tad tas buus Extra varjants)

Es glabatu shaadi:

id | ... | text_lv | text_ru | text_eng | ...

Un pie izvilksanas :

SELECT text_$valoda AS tekstc ...

tas ir noraadiitu konkretoo lauku ko jatlasa.. piedevam vinjam iedodot nosaukumu, lai talak shamo var izmantot PHP

--

Tas ir lieliem tekstiem & pasham saita contentam ...

--

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...