poEdit og oversættelse af sprogfiler

af Georg S. Adamsen den 13. april 2009

i OVERSÆTTELSE, TIPS

Jeg får af og til spørgsmål om, hvordan man bruger poEdit, og hvordan man bærer sig ad, når poEdit melder om fejl. Her er derfor en lille introduktion.

Programmet poEdit og nogle grundlæggende begreber

Programmet poEdit (der kan hentes på poedit.net) er beregnet til at redigere po-filer og danne mo-filer. PO står for ‘portable object’. Det betyder, at de kan læses uafhængig af platform, f.eks. Linux eller Windows. MO står for ‘machine object’. De er beregnet til at indlæses og bruges direkte i f.eks. WordPress.

En po-fil består af et hoved med forskellige oplysninger, som man i poEdit indtaster i Præferencer (f.eks. oversætterens navn og e-mail) og i Indstillinger (som jeg skal vende tilbage til). I Præferencer kan man under Redigeringsværktøj også ændre skrifttype og -størrelse

Ellers er det primære, at man oversætter strenge. Man har en streng i dobbelte anførselstegn, som poEdit som standard vist ikke viser. I al fald kan det slås til og fra under Vis-menuen. Disse anførselstegn er grunden til, at poEdit indsætter en “\” foran et anførselstegn (i en almindelig editor skal man selv indsætte anførselstegnet).

Escapening

Escapening

En samling af disse originaltekster og oversættelserne kaldes et katalog. Derfor er der en menu for “Katalog”. WordPress eller et andet php-program slår op i kataloget for at finde den rigtige oversættelse af en streng. Programmøren skal derfor også have fortalt WordPress, hvilken fil der skal slås op i. Af og til sker det ikke. Det kan kræve ændringer i kildekoden.

poEdit (eller et andet program) finder alle de strenge, der kan oversættes, fordi udvikleren har brugt forskellige nøgleord i kildekoden. Dem kan man i øvrigt angive i poEdit. Hvis man ikke angiver dem, kan poEdit ikke opdatere fra kildekoden, for den vil ikke vide, hvad der skal oversættes.

Nøgleord i poEdit

Nøgleord i poEdit

Det er så bare at gå i gang med at oversætte streng for streng. Selv om det kan være lettere sagt end gjort. Dels kan der være tale om fagudtryk, dels kan det være svært at gennemskue, i hvilken sammenhæng strengene bruges. Også selv hvis man kan kigge i kildekoden, som jeg straks skal vende tilbage til.

De “skjulte” tegn (whitespace)

Nogle udviklere og designere skriver strenge, hvor en streng, der skal oversættes, ender med et mellemrum. Det er svært at se. Men man kan slå Vis anførselstegn til på Vis-menuen. Så er det meget nemmere at se. Kommer man til at slette en af dem, sætter poEdit den ind igen!

Vis anførselstegn

Vis anførselstegn

poEdit og kildekode

I Indstillinger man kan indtaste indstillinger, som gemmes og bruges med hver enkelt po-fil.

poEdit-indstillinger

poEdit-indstillinger

Det er vigtigt, at tegnsæt angives som ovenfor, men en po-fil kan vist godt fungere uden de øvrige værdier. Men skal man være sikker på, at man får alle strenge til oversættelse vist, så skal man særligt sikre sig, at den sidste linje, Flertalsformer, er korrekt udfyldt.

Indstilling af stier

Indstilling af stier

Hvis man indtaster den korrekte sti – og den skal stå både som basissti og under Stier – så kan man opdatere po-filen fra kildekoden. Man sikrer sig, at man oversætter den seneste udgave af kildekoden. Det betyder også, at poEdit registrerer placeringen af de strenge, der skal oversættes. Så kan man få poEdit til at vise dem.

Som det ses i illustrationen nedenfor, så højreklikker man på den streng, der skal oversættes, i listen og vælger en af de linjer, der står under Referencer. Så får man et vindue med kildefilen. Da man kun får et udsnit vist, kan man trykke på det ikon, jeg har fremhævet med gult, og få en vist hele kildekoden. Jeg bruger Notepad++, som er en god editor. Den kan bl.a. farve php-kode, så det er lettere at læse kildekoden. Man kan godt sætte poEdit til at åbne direkte i ens editor (i Præferencer), men så er det ikke så let at skifte mellem de forskellige steder, en given streng findes i kildekoden.

Vis kildekode i poEdit

Vis kildekode i poEdit

Brug af tidligere oversættelser

poEdit kan faktisk lave en database med de oversættelser, man har, og oversætte ved hjælp af dem, man allerede har oversat. Man skal dog passe på, for dels kan der jo være problemer med en given oversættelse, dels kan det være, en oversættelse er rigtig, men blot ikke i den pågældende sammenhæng.

Det er et udmærket redskab, der kan hjælpe en til at oversætte med større konsistens. Af og til har en computer en bedre hukommelse, end vi har.

Min erfaring er dog, at en del oversættelsesforslag er ubrugelige. Men downloader man WordPress’ po-fil og inkluderer i oversættelseshukommelsen, så vil databasen også tage den officielle oversættelse med i betragtning.

Brug af eksisterende oversættelser

Brug af eksisterende oversættelser

Som det ses, er der nogle, der dur, og nogle, der ikke gør det. Dem, der ikke gør det, må jo være valgt, fordi der er fælles ord i de to strenge i originalteksterne. Men tit kan der være mere end en oversættelse i ens database. Så vælger poEdit en af dem, men man har adgang til de andre via en lokalmenu (via højreklik).

Flere forslag til oversættelse

Flere forslag til oversættelse

I dette eksempel er der både “Redigér” og “Rediger”. Det første er min foretrukne, det andet den officielle WordPress-oversættelse. Ingen vil være i tvivl med dette ord, men det kan være rart at skelne mellem “Arkivér” og “Arkiver”. Sådan er der så meget.

Redigering eller opdatering af en po-fil

Hvis der allerede er en po-fil, kan man åbne den og redigere den. Typisk  vil man have brug for at opdatere en eksisterende po-fil.

Én mulighed er at opdatere på grundlag af en såkaldt pot-fil, som udvikleren af temaet eller pluginnet har inkluderet i temaet eller pluginnet. En pot-fil er en po-template-fil. po-Edit kan lave en skabelon til at oversætte ud fra.

Desværre hænder det, at udvikleren glemmer at opdatere po-filen. Sker det, eller vil man gerne kunne se kildekoden, hvor en given streng, der skal oversættes, forekommer, skal man pakke pluginnet eller temaet ud på ens harddisk. Man skal have de rigtige værdier i Indstillingerne. Ikke mindst skal oplysningerne om tegnsæt, stier og nøgleord være angivet rigtigt. Har man problemer med at åbne kildekoden, fordi poEdit returnerer en fejlmelding om tegnsæt, kan man prøve at eksperimentere lidt med tegnsæt-indstillingen for kildekoden.

Har man opdateret en eksisterende po-fil ud fra en pot-fil eller fra kildekoden, vil man typisk have nogle sorte, nogle brune og nogle grå tekster.

Efter opdatering

Efter opdatering

De sorte eller mørkeblå er nye strenge, der slet ikke fandtes i den gamle. De brune er strenge, der er blevet ændrede, og derfor er blevet mere eller mindre unøjagtige. De grå er strenge, der er fuldstændig identiske. De brune er egentlig markeret som Fuzzy. Hvis man ændrer i oversættelsen, fjernes Fuzzy-markeringen. Man kan sætte den igen med Alt-U, hvis man ikke lige kan finde den rigtige oversættelse. Man kan også fjerne den med Alt-U, hvis oversættelsen faktisk er korrekt. Det kan f.eks. ske, hvis der er rettet en trykfejl i originalteksten.

Oprettelse af en po-fil

Hvis der ikke findes en po-fil, man kan indlæse, eller en pot-fil, man kan bruge, kan man oprette en po-fil selv, hvis man har adgang til kildekoden (hvis udvikleren har brugt de nødvendige nøgleord og programmeringsteknikker).

Man pakker kildekoden ud og åbner poEdit. Jeg har en skabelon, jeg bruger, når jeg skal begynde fra bunden (den kan downloades her: poEdit-skabelon (253)). Man skal indtaste Basissti og Stier. Det er selvfølgelig en god idé at gemme filen.

Herefter er det “bare” at gå i gang med at oversætte.

Oversættelsesarbejdet i praksis

Mange strenge kan man oversætte direkte, når man får lidt erfaring. Så kan man tit regne ud, hvor en streng bruges. Af og til må man kigge i kildekoden (se ovenfor). Men det er ikke altid nok, især ikke hvis det handler om layout eller om dato og klokkeslæt.

Man kan sikkert gøre det på mange måder, men én måde at gøre det på er at installere have to WordPress-installationer. Jeg har en kørende med den originale version, mens jeg på den anden anvender den mo-fil, som poEdit genererer. Så kan jeg hurtigt sammenligne.

Som ved alt andet oversættelsesarbejde kan det være en god idé at se, hvordan andre oversætter. Af og til kan der dog være brug for at afvige.

Oversættelse af koder for dato og klokkeslæt

Hvis der f.eks. skal angives datoformat, skal kildekoden skrives, så parametrene udgøres af strenge, der kan erstattes med andre strenge. I eksemplet her nedenfor er strengen “l, F jS, Y” erstattet af “l \\den\e\nn j. F Y”, som bliver til f.eks. “mandag den 13. april 2009″. Det kan være noget af en opgave at finde den rigtige formattering af koder for dato og klokkeslæt i oversættelsen. Man skal bruge php’s date-parametre. Man skal “escape” (dvs. bruge “\” foran) bogstaver, som kunne være php-parametre, men ikke skal være det. I eksemplet nedenfor er der escapet med én gang for poEdit og én gang for php. Men det er ikke altid det samme i andre programmer.

To sæt strenge

To sæt streng

Separate strenge for ental og flertal

Dansk skelner mellem ental og flertal. Mange plugins (og nogle temaer) bruger kontrolstrukturer (stærkt forsimplet f.eks. således: hvis 1, så …; hvis 2 eller flere eller, hvis det fx er dansk, hvis 0, så …).

Men man kan også bruge en teknik, hvor po-filen indeholder et sæt af strenge i originalen, som så skal oversættes til et sæt af strenge.

Det er helt afgørende, at det er indstillet korrekt i Indstillinger.

Indstillinger for ental/flertal

Indstillinger for ental/flertal

Faktisk er __ngettext og varianter “deprecated”, hvilket vel sige, at de stadig virker, men at de senere vil blive droppet helt. Man bør i stedet bruge _n. _n funktionen findes også i forskelige varianter. Det er dog sjældent, at varianterne bruges. Som regel bruger programmørerne kun __ngettext eller _n. Og rigtig mange bruger ikke engang dem, når det ellers ville give mere logiske skærmbilleder.

Har man indstillet poEdit korrekt, og findes der en af de to sidste nøgleord, vil man få et skærmbillede som det følgende.

Eksempel på ental/flertal

Eksempel på ental/flertal

I de to faner anfører man så oversættelsen for henholdsvis ental og flertal. Faktisk anfører man de strenge, der skal bruges, når der skal anvendes henholdsvis en entalsform og en flertalsform. På dansk bruger vi flertalsformer efter udtryk for 0 (f.eks. “Jeg har ingen bøger”) og tal større end 2 (“Jeg har to bøger”). Indstillingen “nplurals=2;” angiver, at vi har to muligheder: en entalsform eller en flertalsform. Indstillingen “n= !n 1;” angiver, at der skal bruges flertalsform, når n er forskellig fra 1, dvs. er 0 eller mindst 2.

En hyppig grund til, at der mangler strenge i oversættelsen, er, at værdien for Flertalsformer er indstillet forkert.

Kataloghåndtering

Man kan oprette en oversigt over ens oversættelsesprojekter. Så kan man hurtigt se, om der er nogle, man ikke er færdige med.

Håndtering af oversættelsesfiler

Håndtering af oversættelsesfiler

Problemer med variabler

Det er let at komme til at overse et procent-tegn, men det er ikke smart, fordi det som regel er en variabel. poEdit brokker sig højlydt, hvis procent-tegnet er brugt som procent-tegn.

Den brokker sig også, hvis procent-tegnet er brugt alene. Det sker i en del temaer.

Men selv om poEdit brokker sig og siger, at det er en “fatal error”, så gemmer den faktisk po-filen. Er den indstillet til automatisk at generere en mo-fil, så gør den også det. Man skal blot tjekke, at oversættelsen har nøjagtig samme format som originalen. “% Comments” skal oversættes til “% kommentarer”, selv om poEdit brokker sig.

Anvendt software

Til udarbejdelse af ovenstående har jeg anvendt poEdit, Paint Shop Pro (til skærmbilleder, hvor menuer skal være aktiveret), FireShot Pro og selvfølgelig WordPress. Jeg har særligt brugt pluginnerne Scissors, Faster Image Insert.

Selv lærte jeg en del af at læse John Godleys vejledning: “Translating WordPress Plugins & Themes“. Også andre plugin-udviklere har hjulpet med at oplære mig.

Denne udgave er skrevet 13. april 2009 og senest redigeret 14. april 2009. Forslag til forbedringer eller spørgsmål, som jeg kan lære af, er meget velkomne! Et link til artiklen eller denne blog (WordPress.Blogos.dk) er selvfølgelig også helt ok.

Du kan downloade en pdf-fil til eget brug (med andre ord: send venligst et link, hvis du vil dele den med andre. Så kan de besøge min blog og hente den seneste udgave): poEdit og oversættelse af sprogfiler (242)

Den tilhørende skabelon hentes her: poEdit-skabelon (253)

Udskriv dette indlæg Udskriv dette indlæg Email dette indlæg Email dette indlæg
Peter 13. april 2009 kl. 21.47

Hej,

Rigtig god vejledning… Jeg kæmpede netop med den “fatal error” ved % comments … (Gear Template)
Da den ikke tager den danske oversættelse, men skriver “1 responses to x”

Sejt lille program! Det der PO-edit!

Svar

Georg S. Adamsen 18. juli 2009 kl. 10.20

Artiklen er opdateret, ny pdf og nyt skabelon uploadet 18-07-2009

Svar

Kristian 27. februar 2010 kl. 13.31

Hej Georg,
Det er en fantastisk artikel du har lavet her, og kanon stort arbejde du har lagt i det, kan jeg regne ud.
Jeg har netop brugt denne artikel til at opdatere bbpress 1.0.2 og det virker bare som det skal.

Endnu engang, tak herfra.

Svar

Georg S. Adamsen 27. februar 2010 kl. 13.50

Tak for responsen. Den glæder mig.

Svar

Georg S. Adamsen 14. marts 2010 kl. 09.34

Den tilhørende skabelon er opdateret 14. marts, idet de ny kontekstfunktioner – _x() osv. – kræver nogle ekstra angivelser i poEdit for at blive brugt. Desværre har jeg endnu ikke kunnet finde ud af, hvordan man får poEdit til at vise kontekststrenge. Nogle forslag?

Svar

Kristian 22. april 2010 kl. 00.42

Hvad tænker du på med at vise?
Når jeg åbner eks. mit bbpress projekt, kan jeg gå op i katalog og i indstillinger og der angive de indstillinger som du har fortalt om i denne glimrende artikel. Er det, det du tænker på?

Jeg sender dig iøvrigt lige bbpress på dansk til dig en af dagene – hvis du vil kigge den igennem – den er ikke færdig, men jeg kan ikke overskue det tidsmæssigt ligenu – er jo kok og det er konfirmationstid :)

Svar

Skriv en kommentar

Anti-Spam Protection by WP-SpamFree

Forrige indlæg:

Næste indlæg: