Jan Poulsen wrote:
> Jeg kan godt køre med gettext, men nu har jeg et par timer været rundt
> på nette for at finde guider til hvordan, og her da også fundet en,
GNU gettext har tre vigtige filtyper:
fil.pot - en tom fil, der indeholder de tekster, der skal oversættes
fil.po - en fil.pot, hvor oversættelserne er sat ind med f.eks. notepad
fil.mo - en kompileret udgave, som php-websiderne bruger til at oversætte
Den første fil, fil.pot, kan man enten skrive i hånden eller få produceret
med xgettext programmet. Den har samme format som fil.po, bortset fra, at
oversættelserne mangler, og her er et udsnit af sådan en fil:
msgid ""
msgstr "Project-Id-Version: Delphi 7 RTL\n"
"POT-Creation-Date: 2003-03-02 18:54\n"
"PO-Revision-Date: 2003-03-18 17:07+0100\n"
"Last-Translator: Lars B. Dybdahl <lars@dybdahl.dk>\n"
"Language-Team: Dansk <da@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. Programmer's name for it: SInvalidCreateWidget
#: Clx/QConsts.pas:30
msgid "Class %s could not create QT widget"
msgstr "Klasse %s kunne ikke oprette QT widget"
#. Programmer's name for it: STooManyMessageBoxButtons
#: Clx/QConsts.pas:31
msgid "Too many buttons specified for message box"
msgstr "For mange knapper specificeret til meddelelsesboks"
Princippet er ret enkelt, som det kan ses. Når man har fået lavet sin fil.po
fil, kan man generere en fil.mo med kommandoen "msgfmt -o fil.mo fil.po".
Inde i sin webside skal man så:
1) Bruge bindtextdomain for at angive, hvor oversættelsen ligger. Som domain
navn bruger man navnet på fil.mo, dog uden .mo filendelsen. Hvis man i
bindtextdomain angiver "/min/mappe/", så skal oversættelsesfilen fil.mo
ligge i /min/mappe/da/LC_MESSAGES/". da betyder her dansk. Andre landekoder
kan ses her:
http://www.loc.gov/standards/iso639-2/langcodes.html
2) Bruge textdomain for at angive det domain, man brugte i bindtextdomain.
Igen er det filnavnet uden filendelse (og uden sti).
3) Herefter kan man så oversætte med _("This is a test") overalt i sit php
script.
Man skal dog huske, at apache holder php i hukommelsen, og php holder GNU
gettext i hukommelsen, og GNU gettext holder oversættelsesfilen i
hukommelsen for at have optimal performance. Derfor skal man lige genstarte
webserveren hvis man udskifter .mo filerne med en ny udgave. En alternativ
løsning, hvis man ikke kan genstarte webserveren, er at bruge et tal på sit
domain navn, så oversættelserne hedder fil1.mo, fil2.mo, fil3.mo osv.
Der er mange fiduser i at bruge GNU gettext:
1) Oversætteren skal ikke kunne html-kodning eller php kodning.
2) Oversættelse kræver intet andet end notepad.
3) Man kan lave om på websiden og det virker stadigvæk, uden at oversætteren
skal involveres.
4) Man kan meget, meget nemt administrere det, også selv om man skulle have
oversættelser af hjemmesiden til 20 sprog.
Der er flere fiduser på
http://dybdahl.dk/dxgettext/, og hvis man kører
Windows, kan man hente Windows udgaver af ovenstående programmer, dvs.
xgettext.exe, msgfmt.exe osv. ved at installere denne:
http://prdownloads.sourceforge.net/dxgettext/dxgettext-1.0.1.exe?download
Her kan man også se lidt vejledninger, som med dette usenet indlæg i hånden
burde give et ret godt overblik.
Hvis man vil have et godt værktøj til at redigere .po filer med, og som
kører på Windows, så kan jeg anbefale poEdit:
http://poedit.sourceforge.net/download.php
Dette oversættelsessystem bruges i øvrigt mange steder, bl.a.
http://www.debian.org/.
Hilsen,
Lars.
--
Freelance programmør
Programmering mod timebetaling