Jump to content
php.lv forumi

vairākas valodas


black

Recommended Posts

Nē, nestāstiet par if-iem un switch-iem :)

 

Lapai, pie kuras strādāju, vajag multivalodu atbalstu. Ir plānots, ka lietotāji paši varēs lapu iztulkot, līdzīgi kā Google Translation Sevice varēja latviskot Google lapas. Pašlaik lapa izmanto gettext. Lai lietotājiem piedāvātu rīku, ar kuru var iztulkot lapu, gettext failus (po/mo) vajag kaut kā importēt datubāzē, un pēc tam eksportēt atpakaļ. Uzrakstīt to var, protams, bet viegli nebūs. Gettext labā īpašība, savukārt, ir daudzskaitļu atbalsts.

 

Tajā pašā laikā man nepatīk gettext ideja par to, ka php failā tiek saglabāti angļu valodas teksti. Piemēram, failā glabājas 'gettext("Login");'. Taču vārdam Login latviešu valodā var būt vairākas nozīmes (lapas virsrakstā - "Pieslēgšanās", uz submit pogas - "Pieslēgties"). Tad nu atliek gettext rakstīt kaut kādus stulbus teksta id, piemēram, gettext('STRING_034454'), vēl jāpieskata, lai šie nesajuktu.

 

Kādas idejas? Varbūt visus attiecīgās valodas tekstus tiešām turēt masīvā, un masīvus turēt memcached?

Edited by black
Link to comment
Share on other sites

Nu, prefix/suffix metode jau būtībā ne ar ko neatšķiras no STRING_034454. Abos gadījumos uzreiz vairs nevar paļauties uz gettext "default" tulkojumu, un vajag taisīt atsevišķu angļu valodas .po failu.

Edited by black
Link to comment
Share on other sites

Man liekas, ka black grib kaut kā automatizēt, vai ne? Lai nav jāraksta visur "ar roku" un uzmanīgi jāseko līdzi, lai nenokļūdītos ar tiem prefixiem (id)..

 

Man arī interesēja tāda lieta, bet beigās nonācu pie tā paša prefix rakstīšanas...

Link to comment
Share on other sites

Nu, prefix/suffix metode jau būtībā ne ar ko neatšķiras no STRING_034454. Abos gadījumos uzreiz vairs nevar paļauties uz gettext "default" tulkojumu, un vajag taisīt atsevišķu angļu valodas .po failu.

 

black, bet vai "attiecīgās valodas tekstus tiešām turēt masīvā" risinājumā nebūtu šī pati problēma ?

Link to comment
Share on other sites

Vienīgais, ko es varu iedomāties. Pārtaisi visu tiešām uz masīviem (vai vienalga kā glabā tos stringus).

 

Izveido funkciju, kurai tu padod stringu (tāpat kā gettext gadijumā) un vairanta nr. Piemēram:

__('Login', 1);

 

Ja masīvā netiks atrasts Login tulkojuma variants 1, tad izdrukā padoto stringu. Tādejādi varēsi taisīt vienam eng. stringam vairākus tulkojumus. Protams, vari funkciju arī veidot, ka nav variantu. function(str, variant = 0) {}

 

Tad varēsi:

__('Login')

 

Un ja vēlāk parādīsies cits tulkojums šim pašam, tad citur kodā:

__('Login', 1);

 

Cerams, ka saprati. Es zinu, ka nedaudz murgaini skaidroju :)

 

Tipa doma tāda, ka tulkojuma masīvā visiem stringiem var būt vairāki varianti. Defaultais variants ir 0. Bet ir iespēja pievienot 1,2,3 utt.

Edited by andrisp
Link to comment
Share on other sites

Tas jau ir mazliet sarežģītāk - tas, vai izmantot 1. vai 2. variantu ir atkarīgs no tulkojamās valodas. Tā kā laikam tomēr kaut kā nāksies pāriet uz STRING_034454. Tikai baigi negribas visus stringus tagad ar roku pārrakstīt.

Link to comment
Share on other sites

Ja katram tekstam ir savs ID (lai arī vērtības dažās valodās vienādas), tad tādus tekstus var dot tulkot lietotājiem. Savukārt, ja ir tikai viens 'Login' un cipars, tad būtu sarežģītāk uztaisīt lietotāja interfeisu, kurā lietotājs varētu norādīt, ka, piemēram, submit pogai vajag atšķirīgu 'Login' tulkojumu. Un tad pēc tam būtu jāmaina arī kods (no __('Login') uz __('Login', 1)). Es jau iepriekš nevaru paredzēt, kurās valodās kādam tekstam būs vajadzīgi vairāki varianti, nekā angļu val.

Edited by black
Link to comment
Share on other sites

×
×
  • Create New...