Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: aapo - 14.10.08 - klo:14.00
-
Ensin yksinkertainen, mutta toimiva, Howto kuinka Pythonilla tehdään ohjelma, joka käyttää ihan oikeita po/mo-kielitiedostoja.
Tehdään työhakemisto ja siirrytään sinne.
Tehdään selkokielinen po tiedosto, vaikkapa fi.po
domain "myapp"
#: NAME
msgid "Application"
msgstr "Ohjelma"
#: VERSION
msgid "Version"
msgstr "Versio"
Tehdään kansiorakenne:
mkdir -p locale/fi/LC_MESSAGES/
pakataan po -> mo (po on selkokielinen ja mo on binaarinen)
msgfmt fi.po
Siirretään tuotettu myapp.mo oikeaan paikkaan
mv myapp.mo locale/fi/LC_MESSAGES/
Tehdään python-tiedosto
import gettext
class MyApp:
transLoc = "./locale"
t = gettext.translation("myapp", transLoc)
_ = t.ugettext
t.install()
print _("Application")
print _("Version")
Jossa on siis tärkeä tuo transLoc (sijainti) ja "myapp" pitää vastata domain nimeä (se mikä on tuonne po-tiedostoon laitettu).
Nyt tuo alaviiva _ viittaa lokalisoituihin teksteihin.
Ohjelma tulostaa: (siis kun koneen locale on fi)
Ohjelma
Versio
Ja itse kysymys:
Kuinka teen tämän saman c:llä?
-
En tiedä asiasta tarkemmin mutta löysin guuglaamalla tällaisen jutun:http://oriya.sarovar.org/docs/gettext_single.html (http://oriya.sarovar.org/docs/gettext_single.html)
Tässä koodipätkä tuosta jutusta:
#include <libintl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
setlocale( LC_ALL, "" );
bindtextdomain( "hello", "/usr/share/locale" );
textdomain( "hello" );
printf( gettext( "Hello, world!\n" ) );
exit(0);
}
Tuon alaviivajutun saa toimimaan kun lisää tällaisen makron: #define _(STRING) gettext(STRING)
Eli kokonaisuudessaan näin:
#include <libintl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#define _(STRING) gettext(STRING)
int main(void)
{
setlocale( LC_ALL, "" );
bindtextdomain( "hello", "/usr/share/locale" );
textdomain( "hello" );
printf( _( "Hello, world!\n" ) );
exit(0);
}