black Posted January 24, 2008 Report Share Posted January 24, 2008 (edited) 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 January 24, 2008 by black Link to comment Share on other sites More sharing options...
andrisp Posted January 24, 2008 Report Share Posted January 24, 2008 Nu man liekas, ka būs jāizmanto "STRING_034454" pieeja abos gadījumos. Tā kā ja viss jau ir ar gettext panākts, tad nav jēgas īsti pāriet uz citiem risinājumiem. Link to comment Share on other sites More sharing options...
Paulinjsh Posted January 24, 2008 Report Share Posted January 24, 2008 a kur problēma piešūt kaut kādu preffixu vai suffix ? Piemēram, form_submit, open_submit utt :) Link to comment Share on other sites More sharing options...
black Posted January 24, 2008 Author Report Share Posted January 24, 2008 (edited) 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 January 24, 2008 by black Link to comment Share on other sites More sharing options...
Toms Posted January 24, 2008 Report Share Posted January 24, 2008 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 More sharing options...
andrisp Posted January 24, 2008 Report Share Posted January 24, 2008 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 More sharing options...
black Posted January 24, 2008 Author Report Share Posted January 24, 2008 (edited) andrisp, piekrītu, ar masīviem būtu tāds pats sviests. Par masīviem rakstīju tāpēc, ka tādā gadījumā nebūtu jāimportē/jāeksportē mo faili. Edited January 24, 2008 by black Link to comment Share on other sites More sharing options...
andrisp Posted January 24, 2008 Report Share Posted January 24, 2008 (edited) 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 January 24, 2008 by andrisp Link to comment Share on other sites More sharing options...
black Posted January 24, 2008 Author Report Share Posted January 24, 2008 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 More sharing options...
andrisp Posted January 24, 2008 Report Share Posted January 24, 2008 tas, vai izmantot 1. vai 2. variantu ir atkarīgs no tulkojamās valodas. Tas pats jau būtu ar STRING_034454 metodi! Link to comment Share on other sites More sharing options...
black Posted January 24, 2008 Author Report Share Posted January 24, 2008 Nē, tur, piemēram, login pogai un login lapas title būtu atšķirīgi ID. Angliski abi tulkojumi būtu vienādi, bet, latviski un franciski tulkojums atšķirtos. Link to comment Share on other sites More sharing options...
andrisp Posted January 24, 2008 Report Share Posted January 24, 2008 Nu bet tad taču lapas nosaukumam izmanto vienu variantu, bet pogai otru. Neredzu problēmu. __('Login', 0); (jeb vienkārši __('Login')) __('Login', 1); Angliski būs vienādi, bet citām valodām varēsi nodefinēt citus tulkojums. Link to comment Share on other sites More sharing options...
black Posted January 24, 2008 Author Report Share Posted January 24, 2008 (edited) 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 January 24, 2008 by black Link to comment Share on other sites More sharing options...
Recommended Posts