5.8. Gettext

Gettext er et værktøj du bør bruge til at gøre det enkelt for andre at oversætte menutekster m.m. i dine programmer til andre sprog. Princippet i Gettext er at man skriver sit program med alle teksterne til brugergrænsefladen på ét sprog (typisk amerikansk), men indkapsler dem i et funktionskald til Gettext-biblioteket der slår oversættelsen af teksten op i en database for det sprog brugeren har valgt.

Eksempel 5-12. Eksempel på brug af Gettext fra et POSIX Shell-program

Selv i et POSIX Shell-program kan vi bruge Gettext til at håndtere oversættelsen af de tekster brugeren skal se. Vi bruger et program, `hej`, der bare skriver "Hej Verden." som eksempel:


#! /bin/sh
echo "Hej Verden."

Det er gængs praksis at bruge amerikansk engelsk som det grundlæggende sprog i programmer der skal kunne oversættes til alle mulige sprog, så nu bruger vi i stedet for teksten "Hello World." samtidig med at vi erstatter `echo` med `gettext --domain eksempel -s`, hvor "eksempel" er navnet på en samling oversættelser og "-s" får `gettext` til at efterligne `echo`:


#! /bin/sh
gettext --domain eksempel -s "Hello World."
Hvis man bare uden videre kører dette program, skulle det gerne skrive "Hello World.", da `gettext` når den ikke kan finde filen med oversættelserne (her "/usr/share/locale/da/LC_MESSAGES/eksempel.mo") eller ikke kan finde teksten der skal oversættes (her "Hello World.") i filen med oversættelserne, bare udskriver teksten på originalsproget (som den står i programmet).

Nu laver vi så en oversættelse af programmet til dansk. Kildeteksten er filen eksempel.da.po:


msgid "Hello World."
msgstr "Hej Verden."
Den kan vi oversætte til Gettexts interne format (".mo") med programmet `msgfmt`:

hven% msgfmt --output-file=eksempel.da.mo eksempel.da.po
For at vi kan bruge den skal den helst flyttes til systemets standardkatalog for danske oversættelser, /usr/share/locale/da/LC_MESSAGES/:

hven% su -c 'cp eksempel.da.mo /usr/share/locale/da/LC_MESSAGES/eksempel.mo'
Password:
Hvis du nu stiller om til at dine programmer skal være på dansk (kun i den aktive kommandofortolker) vil programmet skrive "Hej Verden." i stedet for "Hello World.":

hven% ./hej
Hello World.
hven% export LANG=da_DK.ISO8859-1
hven% ./hej
Hej Verden.
Vi kan selvfølgelig også stille sproget om til færøsk, men da vi ikke har oversat programmet endnu, vil vi bare få teksten ud på originalsproget:

hven% export LANG=fo_FO.ISO8859-1
hven% ./hej
Hello World.

Eksempel 5-13. Eksempel på brug af Gettext fra et Ada-program

(kommer senere)

Eksempel 5-14. Eksempel på brug af Gettext fra et C-program

(kommer senere)

Når et program er forberedt til oversættelse med "gettext", er det næste skridt at oversætte det. Til det formål er KBabel (http://www.klid.dk/dansk/kbabel.html) nok det bedste værktøj.