Eli softaan oisi mukava saada tuo käännöspuoli kuntoon ihan muuten vaan. Nuo .po tiedostot ovat juuri tätä varten eli, kuinka tämä toimii. Esim seuraava
char domain[] = "airpong"; setlocale ( LC_ALL, "" ); bindtextdomain ( domain, "/data/translations" ); textdomain ( domain ); cout << gettext("Config loaded...");
Pitääkö ohjelmalle määrittää mitä kieltä pitää käyttää vai osaako se jo tuosta hakea oikean kielitiedoston jos järjestelmän kielenä on esim suomi. Toivottavasti ymmärsitte.
Kyllä pitäis ymmärtää. Eli LANG järjestelmä muuttujan perusteella haetaan käännös.
Olen ymmärtänyt että tuo luo tiedoston tuonne /data/tranlations josta sitten voi tehdä käännöksiä. Olenko ymmärtänyt väärin vai pitääkö siihen käyttää jotain komentoa?
Gettext on ainakin minusta monimutkainen, joten suosittelen lukemaan suosiolla manuaalia: http://www.gnu.org/software/gettext/manual/
Perusidea on kuitenkin se, että koodissa käännettävät merkkijonot menevät gettext-funktion läpi, kuten esimerkissäsi. Käännöksiä varten ajetaan ohjelma nimeltään xgettext, joka tuottaa .pot-tiedoston. Pot-tiedosto sisältää alkuperäisen käännöksen. Tiedostoa käytetään lähtökohtana varsinaisille käännöksille. Jos alkuperäisiä tekstejä haluaa muuttaa, muutokset tulee tehdä suoraan lähdekoodiin. Pot-tiedosto kopioidaan .po-tiedostoksi (käytä msginitiä), johon käännös tehdään. Jokaisella kielellä on oma po-tiedostonsa.
Kun alkuperäisiä tekstejä muutetaan, täytyy xgettext ajaa uudelleen ja käyttää msgmergeä käännöstiedostojen päivittämiseen.
Toivottavasti sain tämän nyt selostettua oikein, en ole hetkeen gettextiä käyttänyt...
.po tiedosto pitää vielä kääntää .mo tiedostoksi. Eli kun sinulla on .po valmiina niin käytä "msgfmt" komentoa muutokseen. Tämän jälkeen .mo tiedosto kopioidaan kielikäännös hakemistoon. Ja vielä huomautuksena, että kohdehakemiston pitää olla oikeassa muodossa esimerkiksi ../en_US/LC_MESSAGES
Tuntuu olevan todella ongelma kun ei millään saa toimimaan :/ Lähdekoodi on ihan oikein kyllä eikä tule erroreita, mutta sitten noin muuten. Kyllä tämä tästä :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.