Nykyinen versio |
Oma tekstisi |
Rivi 1: |
Rivi 1: |
| '''Gettext''' on [[GNU]]-projektin työkalu ohjelmien [[kotoistus|kotoistamiseen]]. | | '''Gettext''' on [[GNU]]-projektin työkalu ohjelmien [[kotoistaminen|kotoistamiseen]]. |
|
| |
|
| Gettextiä käytettäessä ohjelman käännettävät merkkijonot merkitään sen [[lähdekoodi]]in, jonka jälkeen lähdekoodista luodaan alkuperäiset tekstit sisältävä <tt>.pot</tt>-tiedosto. Tähän tiedostoon kääntäjät sitten lisäävät käännökset eri kielille. Lopulta <tt>.pot</tt>-tiedostosta luotu, käännökset sisältävä <tt>.po</tt>-tiedosto muutetaan binäärimuotoon (<tt>.mo</tt>) ja tallennetaan sopivaan hakemistoon. Tämän jälkeen ohjelma korvaa ajon aikana alkuperäiset merkkijonot käännöksillä. | | Gettextiä käytettäessä ohjelman käännettävät merkkijonot merkitään sen lähdekoodiin, jonka jälkeen lähdekoodista luodaan alkuperäiset tekstit sisältävä <tt>.pot</tt>-tiedosto. Tähän tiedostoon kääntäjät sitten lisäävät käännökset eri kielille. Lopulta käännökset sisältävä <tt>.po</tt>-tiedosto muutetaan binäärimuotoon ja tallennetaan sopivaan hakemistoon, jonka jälkeen ohjelma korvaa ajonaikana alkuperäiset merkkijonot käännöksillä. |
|
| |
|
| == Käyttö == | | == Käyttö == |
|
| |
|
| === Ohjelma käyttämään Gettextiä === | | === Ohjelma käyttämään Gettextiä === |
| Luodaan esimerkiksi [[C]]-kielinen esimerkkiohjelma ja sille käännökset. Luodaan tiedosto <tt>ohjelma.c</tt> jonka sisältö on seuraava: | | Luodaan esimerkiksi [[C]]-kielinen esimerkkiohjelma ja sille käännökset. Luodaat tiedosto <tt>ohjelma.c</tt> jonka sisältö on seuraava: |
| <pre> | | <pre> |
| #include <stdio.h> | | #include <stdio.h> |
Rivi 22: |
Rivi 22: |
| { | | { |
| /* Alustetaan Gettext */ | | /* Alustetaan Gettext */ |
| char ohjelma[] = "ohjelma"; | | char nimi[] = "ohjelma"; |
| setlocale ( LC_ALL, "" ); /* Käytetään ympäristömuuttujia */ | | setlocale ( LC_ALL, "" ); /* Käytetään [[ympäristömuuttuja|ympäristömuuttujia]] */ |
| bindtextdomain ( ohjelma, "./kaannos" ); /* Haetaan käännökset kaannos-alihakemistosta */ | | bindtextdomain ( ohjelma, "./kaannos" ); /* Haetaan käännökset kaannos-alihakemistosta */ |
| textdomain ( ohjelma ); /* Otetaan käännökset käyttöön */ | | textdomain ( ohjelma ); /* Otetaan käännökset käyttöön */ |
Rivi 49: |
Rivi 49: |
| Hello Linux.fi | | Hello Linux.fi |
| Visit http://linux.fi | | Visit http://linux.fi |
|
| |
| === Luodaan .pot-tiedosto ===
| |
| Nyt kun ohjelma käyttää käännöksiä, on seuraavaksi luotava tiedosto, johon kääntäjät voivat lisätä käännöksiä eri kielille. Lähdekooditiedostojen merkkijonot voidaan hakea <tt>xgettext</tt>-ohjelmalla:
| |
| xgettext ohjelma.c
| |
| jonka tuloksena on <tt>messages.po</tt>-niminen tiedosto. Kuitenkin oletuksena <tt>xgettext</tt> ymmärtää vain <tt>gettext()</tt>-funktiolla merkattuja merkkijonoja, joten kerrotaan sille, että käytämme <tt>_()</tt>-funktiota. Lisäksi lähdekoodissa on lisätty kommentti kääntäjille ''TRANSLATORS:''-tunnisteella varustettuna. Koska haluamme sisällyttää nämä kommentit luotavaan tiedostoon, kerrotaan myös tämä avainsana <tt>xgettextille</tt>:
| |
| xgettext -k_ -cTRANSLATORS: ohjelma.c -o ohjelma.pot
| |
| Huomaa, että [[valitsin|valitsimen]] (esim. <tt>-c</tt>) ja parametrin (esim. <tt>TRANSLATORS:</tt>) välissä ei saa olla välilyöntiä. Jos saat virheilmoituksen, jonka mukaan tiedostossa on muita kuin ASCII-merkkejä, on lisäksi kerrottava käytetty merkistö (yleensä [[UTF-8]]):
| |
| xgettext --from-code=utf-8 -cTRANSLATORS: -k_ ohjelma.c -o ohjelma.pot
| |
| Nyt tiedoston <tt>ohjelma.pot</tt> pitäisi näyttää tältä:
| |
| <pre>
| |
| # SOME DESCRIPTIVE TITLE.
| |
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
| |
| # This file is distributed under the same license as the PACKAGE package.
| |
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
| |
| #
| |
| #, fuzzy
| |
| msgid ""
| |
| msgstr ""
| |
| "Project-Id-Version: PACKAGE VERSION\n"
| |
| "Report-Msgid-Bugs-To: \n"
| |
| "POT-Creation-Date: 2007-10-13 19:36+0300\n"
| |
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
| |
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
| |
| "Language-Team: LANGUAGE <LL@li.org>\n"
| |
| "MIME-Version: 1.0\n"
| |
| "Content-Type: text/plain; charset=CHARSET\n"
| |
| "Content-Transfer-Encoding: 8bit\n"
| |
|
| |
| #: ohjelma.c:22
| |
| #, c-format
| |
| msgid "Hello Linux.fi\n"
| |
| msgstr ""
| |
|
| |
| #. TRANSLATORS: Please let %s as it is
| |
| #: ohjelma.c:26
| |
| #, c-format
| |
| msgid "Visit %s"
| |
| msgstr ""
| |
| </pre>
| |
| Tiedoston alussa olevat otsikkotiedot on selitetty [[kotoistus]]-artikkelissa.
| |
|
| |
| Tiedostossa alkuperäiset merkkijonot on merkitty <tt>msgid</tt>-kohtiin ja käännökset on tarkoitus kirjoittaa <tt>msgstr</tt>-kohtiin. Huomaa myös kääntäjälle tarkoitettu kommentti, joka kehottaa olemaan muuttamatta <tt>%s</tt>-merkintää joka on välttämätön C-ohjelman toiminnalle.
| |
|
| |
| === Kääntäminen ===
| |
| Kun ohjelmasta on luotu <tt>.pot</tt>-tiedosto, seuraava vaihe on käännöstiedoston luonti, sekä [[kotoistus|käännösten tekeminen]]. Käännöstiedosto voidaan luoda käsin kopioimalla, tai käyttämällä <tt>msginit</tt> komentoa.
| |
| msginit -l fi_FI -o fi.po ohjelma.c
| |
| Lopullinen käännöstiedosto voisi näyttää tältä (tiedosto <tt>fi.po</tt>:
| |
| <pre>
| |
| # Linux.fi:n esimerkkiohjelma
| |
| # Copyright (C) Linux.fi
| |
| # This file is distributed under the same license as the ohjelma package.
| |
| # Linux.fi:n koodariryhmä <foo@bar>, 2007
| |
| #
| |
| #, fuzzy
| |
| msgid ""
| |
| msgstr ""
| |
| "Project-Id-Version: 1.0\n"
| |
| "Report-Msgid-Bugs-To: linux.fi\n"
| |
| "POT-Creation-Date: 2007-10-13 18:51+0300\n"
| |
| "PO-Revision-Date: 2007-10-13 18:52+0300\n"
| |
| "Last-Translator: Linux.fin käännösryhmä <foo@bar>\n"
| |
| "Language-Team: Finnish <fi@bar>\n"
| |
| "MIME-Version: 1.0\n"
| |
| "Content-Type: text/plain; charset=UTF-8\n"
| |
| "Content-Transfer-Encoding: 8bit\n"
| |
|
| |
| #: ohjelma.c:22
| |
| #, c-format
| |
| msgid "Hello Linux.fi\n"
| |
| msgstr "Terve Linux.fi\n"
| |
|
| |
| #. TRANSLATORS: Please let %s as it is
| |
| #: ohjelma.c:26
| |
| #, c-format
| |
| msgid "Visit %s"
| |
| msgstr "Vieraile osoitteessa %s"
| |
| </pre>
| |
|
| |
| === Käännöksen käyttöönotto ===
| |
| Kun käännös on valmis, pitää se muuttaa binäärimuotoon. Tämä onnistuu <tt>msgfmt</tt>-ohjelmalla komennolla
| |
| msgfmt fi.po -o ohjelma.mo
| |
| Huomaa, että tiedostonimen pitää olla lähdekoodissa <tt>textdomain()</tt>-funktiolle annettu nimi ja tiedostopäätteen <tt>.mo</tt>.
| |
|
| |
| Koska <tt>bindtextdomain()</tt>-funktiolla on käännöksen poluksi asetettu <tt>./kaannos</tt>, on juuri luotu <tt>ohjelma.mo</tt> tallennettava sen alle sopivaan alihakemistoon joka riippuu käytetystä kielestä, ja suomen tapauksessa se on
| |
| ./kaannos/fi/LC_MESSAGES/
| |
| [[Mv|Siirrä]] <tt>ohjelma.mo</tt> nyt tähän polkuun ja aja alussa käännetty ohjelma, jolloin käännösten pitäisi olla käytössä:
| |
| $ LC_ALL=fi_FI.utf8 ./ohjelma
| |
| Terve Linux.fi
| |
| Vieraile osoitteessa http://linux.fi
| |
| <tt>LC_ALL</tt> muuttuja määrittelee halutun localen. Asennetut localet näkee komennolla <tt>locale -a</tt>.
| |
|
| |
| == Katso myös ==
| |
| *[[Kotoistus]]
| |
| *[[Poedit]], Graafinen '''.po'''-tiedostojen kääntäjä
| |
|
| |
| ==Aiheesta muualla==
| |
| *[http://www.sourcerally.net/regin/49-How-to-get-PHP-and-gettext-working-%28ubuntu,-debian%29 How to get PHP and gettext working ubuntu or debian]
| |
|
| |
|
| [[Luokka:Kehitystyökalut]] | | [[Luokka:Kehitystyökalut]] |