kreizyy Posted February 7, 2011 Report Share Posted February 7, 2011 kāds varētu pamacīt, kā jatulko mājaslapa un tad kā lai uzliek kad mainās valoda.. par tulkošanu vienkārši paskaidrojat un parādat piemēru.. :) Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 7, 2011 Report Share Posted February 7, 2011 (edited) Izveidojam direktoriju /languages. Iekš tās liksim valodas failus. Teiksim, english.php, latvian.php un russian.php. english.php: define( 'L__HELLO_WORLD', 'Hello, world!' ); define( 'L__BYE_BYE', 'Bye-bye!' ); latvian.php define( 'L__HELLO_WORLD', 'Sveika, pasaule!' ); define( 'L__BYE_BYE', 'Atā-atā!' ); Lai izvadītu tekstu uzstādītajā valodā... echo L__HELLO_WORLD; Tad vajadzētu kaut kā tās konstrantes "iebarot" pirms visa pārējā. =D Gan jau ir kaut kāds fails, kaut vai konfigurācijas, kas tiek iekļauts visās lapās. Tajā arī pievieno... $default_language = 'latvian'; if( isSet( $_SESSION['language'] ) { switch( $_SESSION['language'] ) { case 'english': require 'languages/english.php'; break; case 'latvian': require 'languages/latvian.php'; break; case 'russian': require 'languages/russian.php'; break; } } else { require "languages/{$default_language}.php"; } Un tad vēl kaut kā valodas iestatījumu pieglabāšana... set_language.php if( !empty( $_GET ) && isSet( $_GET['language'] ) { switch( $_GET['language'] ) { case 'english': $_SESSION['language'] = 'english'; break; case 'latvian': $_SESSION['language'] = 'latvian'; break; case 'russian': $_SESSION['language'] = 'russian'; break; } } Veidosi linkus kaut kā tā... dagrevis.lv/set_language.php?language=english P.S. Ir jābūt ieslēgtām sesijām. Kods gan jau ka līks un nav testēts, bet ceru, ka ideja, vismaz, ir skaidra. =] Edited February 7, 2011 by daGrevis Quote Link to comment Share on other sites More sharing options...
marcis Posted February 8, 2011 Report Share Posted February 8, 2011 Jā, šitā nedari :D Problēma: Google indexēs tikai defaulto valodu. Risinājums: Valodas identifikators jāpadod urlī, rewrite te var palīdzēt to pasākumu padarīt pietiekami smuku. Tāpat arī kaudze ar konstantēm sūkā (tīri mans viedoklis). Man labāk patiktu masīvs, kas sadalīts pa moduļiem - global, raksti, reģistrācija, utt. Arī izvadīšanu būtu foršāk veikt caur funkciju, kas nočekotu vai pieprasītā masīva atslēga eksistē un papildus varētu čekot vai konkrētais klients nav administrators - ja ir, tad blakus izvadītajam tulkojumam var piemest arī edit podziņu. Bet vispār šajā forumā vajadzētu būt vismaz pārsimt tēmām par lokalizāciju. Ja nestrādā foruma meklētājs -> http://www.google.lv/#q=site:php.lv/f/ Quote Link to comment Share on other sites More sharing options...
codez Posted February 8, 2011 Report Share Posted February 8, 2011 Es daru tā. Ir MVC FW, kuram ir templeiti. defaultais templaeits ir kautkas.tpl katras valodas templeits ir kautkas.tpl.en, kautkas.tpl.lv, utt. Kad kontrolerim jālādē sev atbilstošais templeits, tiek noteikta valoda (to var noteikt gan pēc kūkija, gan pēc daļas no url - kā kurš vēlas). Piemēram, ja noteiktā valoda ir lv, tiek pārbaudīts vai eksistē .tpl.lv un vai tā modifikācijas laiks ir vēlāks par atbilstošā .tpl modifikācijas laiku. Ja ir lielāks, tad lādējam .tpl.lv, ja nav, tad tulkojam no .tpl uz .tpl.lv Kā tulkot tas atkal ir gaumes jautājums. Es izmantoju tagu <t> un rakstu <t>email</t> .tpl.en tiek iztulkots kā <t>E-mail</t> .tpl.lv tiek iztulkots kā <t>E-pasts</t> Attiecīgi tulkojumi glabājas db, kur atbilstošam tagam email glabājas pretī tulkojumi visām nepieciešamajām valodām. Plusi: - Tiek izmantots jau iztulkots templeits - maksimāla ātrdarbība. - Tulkojumi glabājas db - ērti menidžēt tulkojumus. - Sistēma automātiski atpazīst, kad ir mainīts orģinālais .tpl un pie katra valodas pieprasījuma to vienreiz iztulko - vēlāk izmanto kešoto tulkoto versiju, tas padara ērtu izstrādi un uzturēšanu. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted February 10, 2011 Report Share Posted February 10, 2011 (edited) Codez, es iespējams kaut ko nepareizi izpratu, bet tā sanāk ka Tavā gadījumā tie .tpl faili satur html kodu? Principā, ja patiešām tā ir, tad uzturēšana šajā ziņā gan nav īsti labākā, nu es domāju kopējās sistēmas uzturēšana vispār, jo sanāk ja skatiem, kas tiek sarakstīts tpl failos, ir jāmaina kaut kas, piemēram tabulas struktūra vai tml., tad sanāk tas ir jālabo katras valods .tpl failā, nav īsti parocīgi, pie kādām 7-8 valodām. Vai es kaut ko līdz galam tai templeitu sistēmā tomēr nepareizi sapratu? Pats personīgi lieku lapas saturu datubāzē (piemēram: object_id, lang, value, kaut kā tā), tas ir ar cms sistēmu ievadāmajiem un aministrējamiem objektiem: rakstiem, ziņām, galerijām un tml., tad tādas mazas lietas kā uzrakstus lietotāja vārdam, parolei, uzrakstus uz pogām un tml. lieku valodu masīvos. Man patīk arī .po faili (sīkāk šeit: http://lv.php.net/manual/en/book.gettext.php), bet te atkal cits trūkums, apache sakešo lokalizācijas failus un kaut ko izmainot ir vai nu jāpārstartē apache, vai arī jāpārsauc lokalizācijas faili, tāpēc šo pieeju pagaidām praksē nekur neesmu pielietojis. Edited February 10, 2011 by Maris-S Quote Link to comment Share on other sites More sharing options...
codez Posted February 10, 2011 Report Share Posted February 10, 2011 (edited) Codez, es iespējams kaut ko nepareizi izpratu, bet tā sanāk ka Tavā gadījumā tie .tpl faili satur html kodu? Principā, ja patiešām tā ir, tad uzturēšana šajā ziņā gan nav īsti labākā, nu es domāju kopējās sistēmas uzturēšana vispār, jo sanāk ja skatiem, kas tiek sarakstīts tpl failos, ir jāmaina kaut kas, piemēram tabulas struktūra vai tml., tad sanāk tas ir jālabo katras valods .tpl failā, nav īsti parocīgi, pie kādām 7-8 valodām. Vai es kaut ko līdz galam tai templeitu sistēmā tomēr nepareizi sapratu? Nav jāmaina katrs fails. teiksim, ja .tpl fails ir <div><t>email</t></div> tad pieprasot .tpl.en failu, tiks pārbaudīts, vai .tpl.en faila maiņas laiks ir mazāks par .tpl, ja ir, tad izveido jaunu .tpl.en failu, aiztājot <t>...</t> ar tulkojumiem un tiks automātiski uzģenerēts fails: <div>E-mail</div> Nākošajā reizē kad tiks pieprasīts .tpl.en fails, ja fails .tpl nebūs mainīts, tad tiks servēts jau uzģenerētais .tpl.en, ja nē, tad tiks automātiski uzģenerēts jauns .tpl.en Edited February 12, 2011 by codez Quote Link to comment Share on other sites More sharing options...
mixis Posted February 10, 2011 Report Share Posted February 10, 2011 Vai ir vai nav jāpārstartē apache, tas ir atkarīts no konfigurācijas. Gettext ir parocīgs arī tādā ziņā, ka uzreiz pārslēdz visu servera lokāli un ir piejami jau lokalizēti datumi, laiki un viss pārējais. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted February 11, 2011 Report Share Posted February 11, 2011 Codez, tagad sapratu, sākumā mazliet savādāk to iedomājos. Mixis, kā ta nav jāpārstartē? Vai arī atkal kaut ko nepareizi sapratu? Ir taču tā, ja tulkojumi ir .mo failos, tad palaižot apache tie tiek sakešoti un, ja pēc laika vienkārši tiks izlabots kāds sīkums .po failā, tad nokompilēts uz .mo un tad vienkārši pa virsu pārkopēts iepriekšējam failam, tad tās tulkošanas izmaiņas neparādīsies bez apache pārstartēšanas. Diezgan daudz agrāk pa google šito lietu skatījos un šitās lietas apiešana ir tikai izmantot izlabotos failus ar jauniem nosaukumiem, piemēram pieliekot modificēšanas datumu nosaukuma. Es meklēju iespēju, kā atslēgt kešošanu apache, bet tā arī nesanāca atrast. Quote Link to comment Share on other sites More sharing options...
kreizyy Posted February 12, 2011 Author Report Share Posted February 12, 2011 es vēl īsti tā pat nesapratu kā to darīt.. :/ 1 posts ir ļoti labs, jo daudziem tā ir tulkots, bet te cits atkal saka ka tas nau labs.. @daGrevis ko definē tas L_HELLO_WORLD ?? define( 'L__HELLO_WORLD', 'Hello, world!' ); define( 'L__BYE_BYE', 'Bye-bye!' ); Quote Link to comment Share on other sites More sharing options...
Gangans Posted February 12, 2011 Report Share Posted February 12, 2011 L_HELLO_WORLD šajā gadījumā ir konstanta vērtība, kura definēta kā Hello, world! Pielietojot echo L__HELLO_WORLD; tev izvadīs Hello, world! Viss ir elementāri... http://php.net/manual/en/function.define.php Quote Link to comment Share on other sites More sharing options...
labaiss Posted February 12, 2011 Report Share Posted February 12, 2011 izvēloties latguage failu, principā tiek mainītas konstaņšu vērtības - taču konstanšu nosaukumi paliek tādi paši. Tas nozīmē, ka aplikācijas izveidē, tur kur nepieciešams izvadīt tekstu (piem., meņu) tu liec konstanti piem., MENU_FIRST - un tad atttiecīgi nodefinē: define("MENU_FIRST", "HOME"); - english PHP define("MENU_FIRST", "SĀKUMS"); - latvian PHP konstantes nosaukums nemainās, bet mainās tās vērtība. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 12, 2011 Report Share Posted February 12, 2011 Pats "L__" pašā sākumā ir saīsinājums no "LANGUAGE" un divas apakšsvītras ir Mans untums, jo patīk nodalīt ko vienu no kā cita. =] P.S. Es padomāju. Te vajadzēja izmantot "namespaces". =P Quote Link to comment Share on other sites More sharing options...
kreizyy Posted February 13, 2011 Author Report Share Posted February 13, 2011 parcik neko daudz no php nemāku un to esat sapratuši, tad girbētu lai dagrevis pastāstī kkā sīkāk kur kas jāliek u.t.t, jo man galvenais ir saprsat to domu kā tas darās un tad viss aizies.. :) Quote Link to comment Share on other sites More sharing options...
mounkuls Posted February 13, 2011 Report Share Posted February 13, 2011 Es parasti uztaisu failu, kas glabājas locale/[valoda] un tur sarakstu masīvu. Ideja ar DB man ar tīri labi patīk, ja kādas izmaiņas ir jāveic, pievieno jaunos vārdus un atjauno/pārraksta to failu. To var automatizēt un php smuki uzģenerē jauno failu. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 13, 2011 Report Share Posted February 13, 2011 (edited) Nav problēmu. Tiksim tik tāl', līdz sapratīsi Manu pirmo domu. Tad, pie reizes, izveidosim to visu ar datubāzi un labošanu ar peles klikšķi uz vārda. =] Ko Tu Manā pirmajā variantā nesaproti? Labojums: Un kā jau marcis teica, no sesijām pāriesim uz URL'ām. xD SEO vārdā! =] Edited February 13, 2011 by daGrevis Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.