Jump to content
php.lv forumi

Translate


kreizyy

Recommended Posts

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 by daGrevis
Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by Maris-S
Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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!' );

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by daGrevis
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...