Ero sivun ”Gettext” versioiden välillä

Siirry navigaatioon Siirry hakuun
963 merkkiä lisätty ,  15. lokakuuta 2015
p (→‎Ohjelma käyttämään Gettextiä: wikilinkki ei näytä toimivan tossa)
 
(17 välissä olevaa versiota 7 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
'''Gettext''' on [[GNU]]-projektin työkalu ohjelmien [[kotoistus|kotoistamiseen]].  
'''Gettext''' on [[GNU]]-projektin työkalu ohjelmien [[kotoistus|kotoistamiseen]].  


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ä.
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ä.


== 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. Luodaat tiedosto <tt>ohjelma.c</tt> jonka sisältö on seuraava:
Luodaan esimerkiksi [[C]]-kielinen esimerkkiohjelma ja sille käännökset. Luodaan 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 nimi[] = "ohjelma";
   char ohjelma[] = "ohjelma";
   setlocale ( LC_ALL, "" );  /* Käytetään ympäristömuuttujia */
   setlocale ( LC_ALL, "" );  /* Käytetään ympäristömuuttujia */
   bindtextdomain ( ohjelma, "./kaannos" );  /* Haetaan käännökset kaannos-alihakemistosta */
   bindtextdomain ( ohjelma, "./kaannos" );  /* Haetaan käännökset kaannos-alihakemistosta */
Rivi 54: Rivi 54:
  xgettext ohjelma.c
  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>:
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_ ohjelma.c -o ohjelma.pot
  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ä:
Nyt tiedoston <tt>ohjelma.pot</tt> pitäisi näyttää tältä:
<pre>
<pre>
Rivi 75: Rivi 77:
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"


#: ohjelma.c:13
#: ohjelma.c:22
#, c-format
#, c-format
msgid "Hello Linux.fi\n"
msgid "Hello Linux.fi\n"
Rivi 81: Rivi 83:


#. TRANSLATORS: Please let %s as it is
#. TRANSLATORS: Please let %s as it is
#: ohjelma.c:17
#: ohjelma.c:26
#, c-format
#, c-format
msgid "Visit %s"
msgid "Visit %s"
Rivi 91: Rivi 93:


=== Kääntäminen ===
=== Kääntäminen ===
Kun ohjelmasta on luotu <tt>.pot</tt>-tiedosto, seuraava vaihe on [[kotoistus|käännösten tekeminen]]. Lopullinen käännöstiedosto voisi näyttää tältä (tiedosto <tt>fi.po</tt>:
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>
<pre>
# Linux.fi:n esimerkkiohjelma
# Linux.fi:n esimerkkiohjelma
Rivi 111: Rivi 115:
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"


#: ohjelma.c:14
#: ohjelma.c:22
#, c-format
#, c-format
msgid "Hello Linux.fi\n"
msgid "Hello Linux.fi\n"
Rivi 117: Rivi 121:


#. TRANSLATORS: Please let %s as it is
#. TRANSLATORS: Please let %s as it is
#: ohjelma.c:18
#: ohjelma.c:26
#, c-format
#, c-format
msgid "Visit %s"
msgid "Visit %s"
Rivi 124: Rivi 128:


=== Käännöksen käyttöönotto ===
=== Käännöksen käyttöönotto ===
Kun käännös on valmis, se pitää muuttaa binäärimuotoon. Tämä onnistuu <tt>msgfmt</tt>-ohjelmalla komennolla
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
  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>.
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 luoto <tt>ohjelma.mo</tt> tallennettava sen alle sopivaan alihakemistoon joka riippuu käytetystä kielestä, ja suomen tapauksessa se on
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/
  ./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ä:
[[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ä:
  $ ./ohjelma
  $ LC_ALL=fi_FI.utf8 ./ohjelma
  Terve Linux.fi
  Terve Linux.fi
  Vieraile osoitteessa http://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 ==
== Katso myös ==
*[[Kotoistus]]
*[[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]]
76

muokkausta

Navigointivalikko