ããã«2çªç®ã®ããŒãžã§ã³ã®pythonãšgtkãäºçŽããŸãã
ç§ã¯ãã·ã¢èªã ãã§ãªããä»ã®èšèªïŒç§ã ãã§ãªãå¿
èŠãªå ŽåãããïŒã§éçºããŠããããã°ã©ã ã®ã¡ã€ã³ãã©ãŒã ã«ç¢æãäœæãããšããäºæãã¬æ¬²æ±ã«ãããå®è£
æ¹æ³ã®æ€çŽ¢ãéå§ããããåŸãŸããã§ããã 空ãå°ãã©ãŒã ã®ããŒã«ã©ã€ãºã«é¢ããå®çšçãªããã¥ã¡ã³ããç°¡åã«èŠã€ããããšãã§ããªãã£ããããä»ã®äººããã幞éã«ãªãããã«ãå°æ¥ãã®èšäºãæžãããšã«ããŸããã
ãã®èšäºã«ã¯ãªããã®ïŒ
-ããã»ã¹ã§ãã©ãŒã ã翻蚳ããæ¹æ³ã ããã¯èŠã€ãããŸããã§ããããç¥ãããã®ã§ãã...
-ããã»ã¹ã§.pyã³ãŒãã®ããã¹ãã翻蚳ããæ¹æ³ã
-ãã¡ãããããŒã«ããã©ãã¯ãžã£ãã¯ããã®ä»ãããã«ã¯ãããŸããã
翻蚳ã¯ãèµ·åæã«ãã±ãŒã«ïŒãŸãã¯ããã©ã«ãã®ãã±ãŒã«ïŒãæå®ããããšã«ããè¡ãããŸãã
æåã«å¿
èŠãªã®ã¯ãæ¢è£œã®ç©ºãå°ãã©ãŒã ã§ãã ãªããªã å
·äœçã«ã¯ç°¡åãªãã¹ããè¡ã£ãŠãããææ¡ããŸãããããã©ãŒã ã¯åçŽã§ãã©ãã«ããã¿ã³ããã§ãã¯ããã¯ã¹ããããŸãã
xmlãã©ãŒã ã³ãŒã<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <child> <widget class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="label" translatable="yes">label text</property> </widget> </child> <child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="label" translatable="yes">button text</property> <property name="response_id">0</property> </widget> <packing> <property name="position">1</property> </packing> </child> <child> <widget class="GtkCheckButton" id="checkbutton1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">checkbutton text</property> <property name="response_id">0</property> <property name="draw_indicator">True</property> </widget> <packing> <property name="position">2</property> </packing> </child> </widget> </child> </widget> </glade-interface>
ãŸãããã®ãã©ãŒã ã衚瀺ããpythonããã°ã©ã ãå¿
èŠã«ãªããŸãïŒããã«ã€ããŠæžããŠããã®ã§ïŒã
åæã«ãã³ã³ãœãŒã«ã§èšèªãå€æŽãããŠããããšã瀺ãæååãã³ã³ãœãŒã«ã«åºåããŸãã
ããŸããŸãªæ¹æ³ã§ããŒã«ã©ã€ãºã§ããŸãã ããšãã°ãåè¡/ãŠã£ãžã§ããã®åŠçã³ãŒããèªåã§èšè¿°ããäœããã®å¶åŸ¡ã³ãã³ãã«å¿ããŠè¡ãæŽæ°ããŸãã ããã«ã¯å°ããªãã©ã¹ããããŸã-ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ããã°ã©ã ã®ãã€ã§ãå®è¡ã§ããŸãããæ®ãã¯ãã€ãã¹ã§ãã ãããŠãããã¯ã²ã©ãèŠããŠåäœããŸãã
åé¡ã¯èªç¶ã«çºçããŸã-æ£æ¹åœ¢ã®è»èŒªã§è»èŒªãåçºæããªãã®ã¯ã©ãã§ããïŒ ãã¹ãŠããã§ã«ããã«ããããšãããã£ãã®ã§ãããã䜿çšããå¿
èŠãããã ãã§ãïŒã»ãšãã©ã®å ŽåïŒã
æåã«ããã±ãŒã«èšå®ããŠãŒã¶ãŒã®ããã©ã«ãã«ãªã»ããããå¿
èŠããããŸãïŒéåžžã¯LANGç°å¢å€æ°ã§å®çŸ©ãããŸãïŒã ããã¯ããã«ãã¹ã¬ããããã°ã©ã ã§èµ·ããããåé¡ãåãé€ãã®ã«åœ¹ç«ã¡ãŸãã ãã®ãããªã¢ã¯ã·ã§ã³ã®å Žåã
ãã±ãŒã«ã¢ãžã¥ãŒã«ãæ¥ç¶ããå¿
èŠããããŸãã
locale.setlocale(locale.LC_ALL, '')
次ã«ã
gettextã¢ãžã¥ãŒã«ã®æ©èœã䜿çšããŸãïŒãããã£ãŠãæ¥ç¶ããå¿
èŠããããŸãïŒã 圌ã®ããã¥ã¡ã³ããèŠããšãããã€ããª.moãã¡ã€ã«ããå¿
èŠãªããšãããããŸãã
.moãã¡ã€ã«ã¯ããã¹ãŠã®ç¿»èš³å¯èœãªããã°ã©ã è¡ã®ãªã¹ããæã€ãã¡ã€ã«ã§ãã
ããããååŸããæ¹æ³ïŒ
æåã«ãã°ã¬ãŒããã©ãŒã ïŒãŠã£ãžã§ããã®ç¢æïŒãããã¹ãŠã®è¡ãåé€ããå¿
èŠããããŸããããã¡ãããããæåã§è¡ãããšã¯äŸ¡å€ããããŸããã ãããè¡ãã«ã¯ãintltoolã³ãã³ãã®ã»ããã䜿çšããŸãã
intltool-extract --type=gettext/glade localize.glade
å¿
èŠã«å¿ããŠãè¿œå ã®ãã©ã¡ãŒã¿ã人ã§èŠã€ããããšãã§ããŸãã æåŸã®å
¥åãã©ã¡ãŒã¿ãŒã¯ãããã¹ãããªããã³ã°ãããã©ãŒã ã®ç©ºãå°ãã¡ã€ã«ã§ãã ãã®ã³ãã³ãã¯ãlocalize.glade.hãã¡ã€ã«ãäœæããŸãã
char *s = N_("label text"); char *s = N_("button text"); char *s = N_("checkbutton text");
ã芧ã®ãšããããã©ãŒã ã®ãŠã£ãžã§ããã®ãã¹ãŠã®ããã¹ãè¡ããªã¹ããããŠããŸãã
Pythonãã¡ã€ã«ã«ã¯ã翻蚳ãããè¡ããããŸãã ããŒã«ã©ã€ãºããå¿
èŠã¯ãªããããŒã«ã©ã€ãºããŒã ã翻蚳ãå¿
èŠã§ããããšãç解ã§ããããã«ããŒã¯ããã ãã§ãã ãã®ãããããã¥ã¡ã³ãã§ã¯æ¬¡ã®ããã«è¡ãèšè¿°ããããšãæšå¥šããŠããŸãã
print _("hello to me")
ã€ãŸã _ïŒïŒãåã蟌ã
äžèšã§ãããããã«ãlocalize.glade.hã§ã¯ãè¡ã¯N_ïŒïŒã§ã©ãããããŠããŸãã ãŸããäžçš®ã®ããŒã«ãŒã§ãã
ãã®ãããå¿
èŠãªãã¹ãŠã®ããã¹ãã«ããŒã¯ãä»ãããã1ã€ã®å Žæã«åéããå¿
èŠããããŸãã ããŒã ã¯ãããæ¯æŽããŸãïŒ
xgettext --language=Python --keyword=_ --keyword=N_ --output=show_form.pot show_form.py localize.glade.h
--keywordãªãã·ã§ã³ã¯ãåéæã«æ€çŽ¢ããã©ãã«ãããã°ã©ã ã«ç€ºããŸããããã¯ã2ã€ã®ã_ããšãN_ããããããã§ãã --outputã¯åºåãã¡ã€ã«ã®ååãèšå®ããã©ãã«ãæ€çŽ¢ããå¿
èŠããããã¹ãŠã®ãã¡ã€ã«ã®ãªã¹ãããããŸãïŒã©ãã«ã¯ç°ãªãå¯èœæ§ããããšçµè«ä»ããããšãã§ããŸãããããã¯ç¹ã«éèŠã§ã¯ãªãã®ã§æ°ã«ããŸããã§ããïŒã
çµæã¯ã次ã®å
容ã®ãã¡ã€ã«ã§ããïŒèª¬æçãªã¿ã€ãã«ã
ïŒèäœæš©å¹Žã®ããã±ãŒãžã®èäœæš©è
ïŒãã®ãã¡ã€ã«ã¯ãPACKAGEããã±ãŒãžãšåãã©ã€ã»ã³ã¹ã®äžã§é
åžãããŸãã
ïŒç¬¬äžèè
<EMAIL @ ADDRESS>ã幎ã
ïŒ
ïŒããã¡ãžãŒ
ã
ã
ããããžã§ã¯ãIDããŒãžã§ã³ïŒããã±ãŒãžããŒãžã§ã³\ nã
ãReport-Msgid-Bugs-ToïŒ\ nã
ãPOT-äœææ¥ïŒ2012-11-14 13ïŒ54 + 0300 \ nã
ãPOæ¹èšæ¥ïŒYEAR-MO-DA HOïŒMI + ZONE \ nã
ãæåŸã®ç¿»èš³è
ïŒæ°å<EMAIL @ ADDRESS> \ nã
ãèšèªããŒã ïŒLANGUAGE <LL@li.org> \ nã
ãèšèªïŒ\ nã
ãMIMEããŒãžã§ã³ïŒ1.0 \ nã
ãContent-TypeïŒtext / plain; æåã»ãã= CHARSET \ n»
ãã³ã³ãã³ã転éãšã³ã³ãŒãïŒ8ããã\ nã
ïŒïŒshow_form.py:14
msgstrãããã«ã¡ã¯ã
ã
ïŒïŒlocalize.glade.hïŒ1
msgstr "ã©ãã«ããã¹ã"
ã
ïŒïŒlocalize.glade.hïŒ2
msgstr "ãã¿ã³ããã¹ã"
ã
ïŒïŒlocalize.glade.hïŒ3
msgstr "ãã§ãã¯ãã¿ã³ã®ããã¹ã"
ã
ããã¯ãå°æ¥ã®ãã¹ãŠã®ç¿»èš³ãã¡ã€ã«ã®ãã³ãã¬ãŒãã§ãã ç·šéããå¿
èŠã¯ãããŸããã ä»ããèšèªã決ããæã§ãã ç§ã¯è±èªïŒen_USïŒããã·ã¢èªïŒruïŒããã€ãèªïŒde_DEïŒã䜿çšããŸããïŒå®éããã€ãèªã§ã¯ "Hitler Kaput"ãš "Handehokh"ãããããããããã¯æžãããŠããŸããããããŒãã«çœ®ããŠãã ããïŒã èšèªããšã«ããã³ãã¬ãŒãããããŒã«ã©ã€ãºããããã¡ã€ã«ãäœæããå¿
èŠããããŸãã ããã¯ã³ãã³ãã«ãã£ãŠè¡ãããŸãïŒ
msginit --locale=ru --input=show_form.pot msginit --locale=en_US --input=show_form.pot msginit --locale=de_DE --input=show_form.pot
ãã®çµæã3ã€ã®ru.poãde.poãããã³en_US.poãã¡ã€ã«ã衚瀺ãããŸãã å
éšã§ã¯ããã³ãã¬ãŒããšã»ãŒåãããã空ã«ãªã£ãŠããŸãããããããŒã¯æºããããŠããŸãããåžæããããŒã¿ã§ã¯ãªãïŒããŒã«äœããæå®ããªãã£ããããããŸããïŒãè¡ãä»ã®èšèªã«ïŒèªç¶ã«ïŒç¿»èš³ããŠããŸããã æã§ç¿»èš³ãmsgstrãã£ãŒã«ãã«å€æããå¿
èŠããããŸãã ãŸããæåã»ãããutf-8ã«ä¿®æ£ããŸãããæåãµã€ãºã¯16ãããããã³é»åã¡ãŒã«ã§ãã
çµæã¯æ¬¡ã®ãšããã§ãã
ru.poïŒããã±ãŒãžããã±ãŒãžã®ãã·ã¢èªç¿»èš³ã
ïŒCopyright 2012 THE PACKAGE'S COPYRIGHT HOLDER
ïŒãã®ãã¡ã€ã«ã¯ãPACKAGEããã±ãŒãžãšåãã©ã€ã»ã³ã¹ã®äžã§é
åžãããŸãã
ïŒ<aaa @ bbb>ã2012幎ã
ïŒ
ã
ã
ããããžã§ã¯ãIDããŒãžã§ã³ïŒããã±ãŒãžããŒãžã§ã³\ nã
ãReport-Msgid-Bugs-ToïŒ\ nã
ãPOT-äœææ¥ïŒ2012-11-14 13ïŒ54 + 0300 \ nã
ãPOæ¹èšæ¥ïŒ2012-11-14 13ïŒ58 + 0300 \ nã
ãæåŸã®ç¿»èš³è
ïŒ<aaa @ bbb> \ nã
ãèšèªããŒã ïŒãã·ã¢èª\ nã
ãèšèªïŒru \ nã
ãMIMEããŒãžã§ã³ïŒ1.0 \ nã
ãContent-TypeïŒtext / plain; æåã»ãã= utf-8 \ n "
ãã³ã³ãã³ã転éãšã³ã³ãŒãïŒ16ããã\ nã
ãè€æ°åœ¢ïŒnplurals = 3; è€æ°=ïŒnïŒ
10 == 1 && nïŒ
100ïŒ= 11ïŒ0ïŒnïŒ
10> = 2 && n "
"ïŒ
10 <= 4 &&ïŒnïŒ
100 <10 || nïŒ
100> = 20ïŒïŒ1ïŒ2ïŒ; \ n"
ïŒïŒshow_form.py:14
msgstrãããã«ã¡ã¯ã
ãããã«ã¡ã¯ã
ïŒïŒlocalize.glade.hïŒ1
msgstr "ã©ãã«ããã¹ã"
msgstr "ã©ãã«"
ïŒïŒlocalize.glade.hïŒ2
msgstr "ãã¿ã³ããã¹ã"
msgstr "ãã¿ã³"
ïŒïŒlocalize.glade.hïŒ3
msgstr "ãã§ãã¯ãã¿ã³ã®ããã¹ã"
msgstrãã§ãã¯ããŒã¯
de.poïŒã¯ãããã€ãèªã§ã¯ãããŸããããããã¯ãŸã£ããéèŠã§ã¯ãããŸããïŒïŒ
ïŒããã±ãŒãžããã±ãŒãžã®ãã€ãèªç¿»èš³ã
ïŒCopyright 2012 THE PACKAGE'S COPYRIGHT HOLDER
ïŒãã®ãã¡ã€ã«ã¯ãPACKAGEããã±ãŒãžãšåãã©ã€ã»ã³ã¹ã®äžã§é
åžãããŸãã
ïŒ<aaa @ bbb>ã2012幎ã
ïŒ
ã
ã
ããããžã§ã¯ãIDããŒãžã§ã³ïŒããã±ãŒãžããŒãžã§ã³\ nã
ãReport-Msgid-Bugs-ToïŒ\ nã
ãPOT-äœææ¥ïŒ2012-11-14 13ïŒ54 + 0300 \ nã
ãPOæ¹èšæ¥ïŒ2012-11-14 14ïŒ14 + 0300 \ nã
ãæåŸã®ç¿»èš³è
ïŒ<aaa @ bbb> \ nã
ãèšèªããŒã ïŒãã€ãèª\ nã
ãèšèªïŒde \ nã
ãMIMEããŒãžã§ã³ïŒ1.0 \ nã
ãContent-TypeïŒtext / plain; æåã»ãã= utf-8 \ n "
ãã³ã³ãã³ã転éãšã³ã³ãŒãïŒ16ããã\ nã
ãè€æ°åœ¢ïŒnplurals = 2; è€æ°=ïŒnïŒ= 1ïŒ; \ n "
ïŒïŒshow_form.py:14
msgstrãããã«ã¡ã¯ã
msgstr "f"
ïŒïŒlocalize.glade.hïŒ1
msgstr "ã©ãã«ããã¹ã"
msgstr "d"
ïŒïŒlocalize.glade.hïŒ2
msgstr "ãã¿ã³ããã¹ã"
msgstr "g"
ïŒïŒlocalize.glade.hïŒ3
msgstr "ãã§ãã¯ãã¿ã³ã®ããã¹ã"
msgstr "e"
en_US.poïŒããã±ãŒãžããã±ãŒãžã®è±èªç¿»èš³ã
ïŒCopyright 2012 THE PACKAGE'S COPYRIGHT HOLDER
ïŒãã®ãã¡ã€ã«ã¯ãPACKAGEããã±ãŒãžãšåãã©ã€ã»ã³ã¹ã®äžã§é
åžãããŸãã
ïŒ<aaa @ bbb>ã2012幎ã
ïŒ
ã
ã
ããããžã§ã¯ãIDããŒãžã§ã³ïŒããã±ãŒãžããŒãžã§ã³\ nã
ãReport-Msgid-Bugs-ToïŒ\ nã
ãPOT-äœææ¥ïŒ2012-11-14 13ïŒ54 + 0300 \ nã
ãPOæ¹èšæ¥ïŒ2012-11-14 13ïŒ58 + 0300 \ nã
ãæåŸã®ç¿»èš³è
ïŒ<aaa @ bbb> \ nã
ãèšèªããŒã ïŒè±èª\ nã
ãèšèªïŒen_US \ nã
ãMIMEããŒãžã§ã³ïŒ1.0 \ nã
ãContent-TypeïŒtext / plain; æåã»ãã= utf-8 \ n "
ãã³ã³ãã³ã転éãšã³ã³ãŒãïŒ16ããã\ nã
ãè€æ°åœ¢ïŒnplurals = 2; è€æ°=ïŒnïŒ= 1ïŒ; \ n "
ïŒïŒshow_form.py:14
msgstrãããã«ã¡ã¯ã
msgstrãããã«ã¡ã¯ã
ïŒïŒlocalize.glade.hïŒ1
msgstr "ã©ãã«ããã¹ã"
msgstr "ã©ãã«ããã¹ã"
ïŒïŒlocalize.glade.hïŒ2
msgstr "ãã¿ã³ããã¹ã"
msgstr "ãã¿ã³ããã¹ã"
ïŒïŒlocalize.glade.hïŒ3
msgstr "ãã§ãã¯ãã¿ã³ã®ããã¹ã"
msgstr "ãã§ãã¯ãã¿ã³ã®ããã¹ã"
ã©ããããã€ãã£ãããŒãžã§ã³ãäœæããããã§ãïŒããã©ã«ãã§en_USããããŸãïŒã ããããçµå±ã®ãšãããä»ã®äººãããšãã°de_DEãæã£ãŠããå¯èœæ§ããããè±èªãžã®ç¿»èš³ãèŠãããšæãã§ãããã ã¯ããgettextéçºè
ã¯äœæããããšããå§ãããŸãã
äžéšã®ããã°ã©ããŒã¯ãintltool-mergeã³ãã³ãã䜿çšããŠãã©ãŒã ã«å€æŽãå ããããšãæšå¥šããŠããŸããã åæã«ããŸã£ããåããã©ãŒã ãå€æŽããã«äœæããŸãããããã®å¿
èŠæ§ã¯ããããŸããã
ãããã£ãŠã.moãã¡ã€ã«ãäœæããããã®ãã¹ãŠããããŸãã ããã¯ã³ãã³ãã«ãã£ãŠè¡ãããŸãïŒ
msgfmt ru.po -o locale/ru/LC_MESSAGES/show_form.mo msgfmt en_US.po -o locale/en_US/LC_MESSAGES/show_form.mo msgfmt de.po -o locale/de/LC_MESSAGES/show_form.mo
-oãªãã·ã§ã³ïŒéåžžã«æçœïŒã¯ãå®æãããã¡ã€ã«ãé
眮ããããã£ã¬ã¯ããªã瀺ããŸããæäžäœãã£ã¬ã¯ããªïŒããã§ã¯ããã±ãŒã«ãïŒã¯ãã¹ãŠã®.moãã¡ã€ã«ã§åãã§ããå¿
èŠãããããã®ãã±ãŒã«åã®ãã£ã¬ã¯ããªã移åããããšã«æ³šæããŠãã ããïŒruãdeãen_USãde_DEãru_RU-æåŸã®2ã€ã«ã¯æ¹èšããªããããããã°ã©ã ã¯ããããæåã®æåã«æžãããŸããããã«ããŒã ã䜿çšã§ããŸãïŒã Pythonããã°ã©ã ã§æå®ããããã¡ã€ã³ãšåãæ¹æ³ã§ãããmoãã®ã¿ã§åŒã³åºãå¿
èŠããããŸãã ãŸããLC_MESSAGESã¯ãå
éšãã£ã¬ã¯ããªã®ååã®ããã€ãã®å¯èœãªããªãšãŒã·ã§ã³ã®1ã€ã§ãïŒãŸããåãååã䜿çšããããšããå§ãããŸãïŒã
ããã«ã€ããŠã¯å
¬åŒææžãè¿°ã¹ãŠããŸãïŒ
...
localedir / language / LC_MESSAGES / domain.moãèšèªã¯ããããç°å¢å€æ°LANGUAGEãLC_ALLãLC_MESSAGESãLANGã§æ€çŽ¢ãããŸãã
ãã®çµæãããã°ã©ã ã§æ¢ã«äœ¿çšã§ããæ¹è¡ä»ãã®ãã¡ã€ã«ãåŸãããŸããïŒãã®ãããªæäœã¯ãPython / gladeã ãã§ãªãå®è¡ãããŸãïŒã
pythonããã°ã©ã ã«æ»ããŸãããã
ãŸããgettextãæ§æããŸãã ãã±ãŒã«èšå®ããªã»ããããåŸã翻蚳ãã¡ã€ã«ãååŸããå Žæãšãã¡ã€ã«ã圌ã«äŒããå¿
èŠããããŸãã ãã®ããã«ã2ã€ã®å€æ°ãå°å
¥ããŸããã
APP="show_form" DIR="locale"
APPãããã°ã©ã ã®ååãšäžèŽãããšããäºå®ã¯ãããã¥ã¡ã³ãã«ã¯æ®ã£ãŠããŸããããä»»æã®ååãååšããå¯èœæ§ããããšæããŸãã é¢é£ä»ããããŠããããã°ã©ã ã®ååã§.moãã¡ã€ã«ãèŠããšãäœãäœã§ããããç解ããã®ãã¯ããã«ç°¡åã«ãªããŸãã
APPã¯.moãã¡ã€ã«ã®ååãDIRã¯èšèªãå«ãå
±éãã£ã¬ã¯ããªã§ãã ãã®äºå®gettextã®èª¬æã¯ã次ã®è¡ã«ãã£ãŠçæãããŸãã
gettext.bindtextdomain(APP, DIR) gettext.textdomain(APP)
次ã«ã_ïŒïŒã®åœ¢åŒã®è¡ãã©ãããããPythonã«èª¬æããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãã_ãã«æå®ããããã¡ã€ã«ãã翻蚳ãååŸããæ©èœãå²ãåœãŠãããŸãã ããã¯2ã€ã®æ¹æ³ã§èšè¿°ã§ããŸãã
lang = gettext.translation(APP, DIR) _ = lang.gettext
ãŸãã¯
_ = gettext.gettext
ããã¯ãã¢ãžã¥ãŒã«ã³ãŒããèŠããšåãããšã§ãã ãããã£ãŠãããçãã¬ã³ãŒããéžæããããšã¯çã«ããªã£ãŠããŸãã
ããã§ã.pyãã¡ã€ã«å
ã®ããã¹ããç®çã®èšèªã§è¡šç€ºã§ããŸãã ãããŠgladeãã©ãŒã ãããŒã«ã©ã€ãºããããã«ãgtkã翻蚳ã®å
¥æå
ããããŠã©ãã説æããå¿
èŠããããŸãïŒ
gtk.glade.bindtextdomain(APP, DIR) wTree = gtk.glade.XML("localize.glade", "window1", APP)
æçµã³ãŒãïŒ
æã¡äžãïŒ
LANG=en_US.utf-8 ./show_form.py
LANG=ru_RU.utf-8 ./show_form.py
LANG=de_DE.utf-8 ./show_form.py
ãããŠãããã§ãšã©ãŒãæ£çŽã«é£ã³åºããŸããtkã ãã€ãã®ãã±ãŒã«ã¯ç§ã«æ¥ç¶ãããŠããŸããã ãããã£ãŠããã±ãŒã«ã䜿çšããã«ã¯ãã°ã©ãã£ã«ã«ã·ã§ã«ã®èšå®ã«è¿œå ããå¿
èŠããããŸãã
ããã ãã§ã
æŽæ° ïŒ
ãã«ããŒã«ã€ããŠã libgladeã®ãã©ãŒã ãæ¢ã«ããå Žåã¯ãlibglade-convertã䜿çšããŠå€æããããšãããïŒãšã©ãŒãçºçããŸããïŒããã«ããŒçšã«æ°ãããã©ãŒã ãæç»ããŸãã
ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ãŸããMoonriseãæ£ããææããŠããããã«ãContent-Transfer-Encodingã¯8ãããã«èšå®ããããšïŒã€ãŸããå€æŽããªãããšïŒãå
¬åŒã«æšå¥šãããŠããŸãã