Muokataan sivua Gettext

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

Nykyinen versio Oma tekstisi
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ä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ö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_ -cTRANSLATORS: ohjelma.c -o ohjelma.pot
  xgettext -k_ 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 77: Rivi 75:
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"


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


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


=== Kääntäminen ===
=== 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.
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>:
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 115: Rivi 111:
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"


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


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


=== Käännöksen käyttöönotto ===
=== 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
Kun käännös on valmis, se pitää 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 luotu <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 luoto <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ä:
  $ LC_ALL=fi_FI.utf8 ./ohjelma
  $ ./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]]
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)
Noudettu kohteesta ”https://www.linux.fi/wiki/Gettext