Oversættelse af cms

Tags:    php

<< < 12 > >>
Hej Udviklere.

Jeg står og skal oversætte firmaets cms (et pak ud community (som phpbb)).

Som det ser ud nu, er pakken kun lavet på dansk - altså alt sprog ligger rundt omkring i koderne.

Jeg kan forstå at jeg skal lave nogle sprogfiler (lang/da.php - en.php osv), men hvorledes griber jeg det an?

Skal jeg ud i define kommandoen eller blot strenge/variabler som f.eks:

da.php

$SITE_Welcome = "Velkommen til ..";

en.php

$SITE_Welcome = "Welcome to ..";

Websitet (pakken om man vil) har omkring 5000 linier som skal oversættes, jeg starter naturligvis med at lave en dansk sprogfil - for derefter at oversætte den til hhv. engelsk og svensk.

Mit simple spørgsmål lyder: Hvordan vil du håndtere denne opgave nemmest?

Giv gerne nogle kode eksempler, er ikke så stærk i oversættelse, altså hvordan opgaven nemmest løses.

Mvh. Mikkel



13 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 10 karma
Sorter efter stemmer Sorter efter dato
Hej Mikkel

Du kan sagtens have én sprogfil pr. sprog, du vil tilbyde, men behold alle tekststrenge i én variabel, da PHP ellers skal sættes 5.000 forskellige variable. Fx.:

da.php
Fold kodeboks ind/udPHP kode 


en.php
Fold kodeboks ind/udPHP kode 


Sprogvalget kan du gemme i en session enten via et brugervalg eller ved fx at tjekke IP-adressen fra brugeren. Så indlæser du den rigtige sprogfil udfra, hvad der bliver sat i din session.

Alternativt
Hvis der er tale om et større website, bør du dog overveje gettext-metoden. Den er noget mere kompliceret, men det er nemmere at vedligeholde, og det har også bedre performance på større websites. Bl.a. WordPress anvender gettext. Læs mere her.

Der findes også et GUI til gettext-oversættelse, så vedligeholdelse bliver ultra-nemt.

PS: gettext er vist ikke understøttet af alle webhoteller, så undersøg med din host, hvis I ikke har egen server. I nogle tilfælde kræver det også genstart af server ved opsætning.



Indlæg senest redigeret d. 09.05.2011 09:24 af Bruger #69
Den måde jeg har gjort det på i et fritidsprojekt (dog .net og ikke php) er at jeg har lavet en xml fil som ser ud som denne (uddrag af filen):

Fold kodeboks ind/udXML kode 


I den engelske version er alle phrases så oversat til Engelsk og i den tyske oversat til Tysk, etc.

Jeg har så en shared metode som henter oversættelsen fra XML filerne:

Fold kodeboks ind/udCSharp kode 


Den modtager så den term der skal oversættes og returnere den fundne phrase.

Så kan jeg rundt omkring i systemet bruge det, ved at skrive:

Fold kodeboks ind/udCSharp kode 


Det man skal være opmærksom på, er om man som i mit program har performancemæssig råd til at åbne/lukke XML filen hver gang, eller om man en gang for alle (når applikationen startes) skal loade alle oversættelser ind i memory.

Jeg tror dog at 5000 oversættelser vil fylde meget i memory, men det er en beregning i selv må lave.

Selve teknikken bag bør også kunne bruges i PHP. Og ønsker du at bruge en database/tabel i stedet for XML filen, er det meget nemt at udskifte.

Desuden bør må udvikle et oversættelsesværktøj, hvor man kan vedligeholde oversættelserne i stedet for at skulle rode direkte i XML filerne / databasetabellerne.



Indlæg senest redigeret d. 08.05.2011 15:42 af Bruger #9814
Hej.

Brian: Super eksempel, men jeg er ikke videre haj til hverken XML eller C familien. Kan desværre ikke bruge det til ret meget, men tusinde tak fordi du gav dig tid til at skrive det. Jeg giver dig +1 alligevel.

Phillip: Hvis WP bruger GetText, bør de fleste webhoteller vel understøtte det da disse typisk har "1 click tjuhej" installeret som netop tilbyder WP og alskens CMSystemer?

Glimrende eksempel, det var den metode jeg selv havde i tankerne - tusinde tak for det.

PS: Hils din lillebror :-)



Jeg står selv snart at skal til at oversætte mit CMS til flere sprog, og den løsning jeg har set som værende den nemmeste metode vil være at hente det via en DB.

Ville gøre således:

Fold kodeboks ind/udPHP kode 


Det er utroligt simpelt, da jeg så kan lave et database interface, og efterfølgende oversætte alle teksterne.

Dog kan jeg godt se, som jeg skriver dette, at der vil komme utroligt mange querys - kan man gøre det på andre måder nemt via DB?

Evt i da.php lave en while query således:

Fold kodeboks ind/udPHP kode 


Hvad siger I?



Phillip: Hvis WP bruger GetText, bør de fleste webhoteller vel understøtte det da disse typisk har "1 click tjuhej" installeret som netop tilbyder WP og alskens CMSystemer?


Undskyld, der var jeg vist lidt uklar :-)

PHP har en indbygget gettext-extension, som er klart den hurtigste "motor". Hvis man ikke har adgang til den via sin host, findes der et library, der kan implementeres i stedet - det hedder ganske enkelt php-gettext og det er vist nok den (eller en afart), der anvendes i WordPress.



Phillip: Hvis WP bruger GetText, bør de fleste webhoteller vel understøtte det da disse typisk har "1 click tjuhej" installeret som netop tilbyder WP og alskens CMSystemer?


Undskyld, der var jeg vist lidt uklar :-)

PHP har en indbygget gettext-extension, som er klart den hurtigste "motor". Hvis man ikke har adgang til den via sin host, findes der et library, der kan implementeres i stedet - det hedder ganske enkelt php-gettext og det er vist nok den (eller en afart), der anvendes i WordPress.


Mente nok. :-)

Jeg tror jeg benytter dit eksempel vedr. to forskellige dir med $lang['welcome'] = "Velkommen til..."; Det må være den mest holdbare, når pakken ved installation kan vælge fhv. dansk-engelsk-svensk-norsk-finsk.

Tusinde tak :-)

Jeg står selv snart at skal til at oversætte mit CMS til flere sprog, og den løsning jeg har set som værende den nemmeste metode vil være at hente det via en DB.

Ville gøre således:

Fold kodeboks ind/udPHP kode 


Det er utroligt simpelt, da jeg så kan lave et database interface, og efterfølgende oversætte alle teksterne.

Dog kan jeg godt se, som jeg skriver dette, at der vil komme utroligt mange querys - kan man gøre det på andre måder nemt via DB?

Evt i da.php lave en while query således:

Fold kodeboks ind/udPHP kode 


Hvad siger I?


Hvis i mit tilfælde, databasen allerede bliver brugt rigeligt - ville det være urimeligt (læs: utopi) at benytte databasen til oversættelsen. Den ville simpelthen bliver overbelastet med alle disse oversættelser. Og hvorfor benytte database, som om man ville skifte mellem sprog pr. dag - nej Phillips eksempel er nok den mest holdbare, endvidere vil GetText være løsningen - (*grr*) hvis bare ens webhotel understøtter det.

Mvh. Mikkel



Indlæg senest redigeret d. 09.05.2011 15:42 af Bruger #16613
phpBB og MediaWiki bruger et PHP-array, altså i stil med:

$lang['welcome'] = 'Welcome';
$lang['tagline'] = 'This is a translated CMS';

WordPress bruger gettext.

En ting man skal være opmærksom på med oversættelse, er at det hurtigt kan blive meget tungt og langsomt selv på små hjemmesider, hvis der er mange strenge. Jeg vil derfor anbefale at undgå en database- eller xml-løsning.

Hvis antallet af strenge der skal oversættes ikke er for stort, vil $lang-metoden nok være det bedste. Men hvis der kommer for mange tekststrenge der skal oversættes, så det kører for langsomt, eller hvis du skal have andre til at oversætte tingene, skal du bruge gettext.



Kan i komme med et eksempel på hvordan man i denne situation ville kunne bruge gettext?

Altså så simpelt som før:

<h2>' . sprog(11) . '</h2> f.eks



Har set linket, jeg synes dog bare at det ser meget besværligt ud - ville være fedt hvis nogen havde mulighed for at gøre det lidt mere simpelt. Min erfaring er at nogle lignende artikler har det med at gøre det mere kompliceret en det egentlig er, så det kunne være fedt med et helheds eksempel.

Jeg går hurtigt død i det bjerg af en lange tekst.



<< < 12 > >>
t