次のコードでは、2 つの英語テキストの間に 2 行の英語テキストと 1 行のルーマニア語テキストが表示されますが、英語テキストしか表示されません (翻訳の切り替えは機能しません)。
main.py:
#! /usr/bin/env python2.7
import gettext
gettext.install('messages', '../i18n', unicode=True)
import card
if __name__ == '__main__':
x = card.Rank()
print x.j, x.a, x.q, x.k
ro = gettext.translation('messages', localedir='../i18n', languages=['ro'])
ro.install()
print x.j, x.a, x.q, x.k
en = gettext.translation('messages', localedir='../i18n', languages=['en'])
en.install()
print x.j, x.a, x.q, x.k
card.py
class Suit(object):
clubs = _('Clubs'),
diamonds = _('Diamonds'),
hearts = _('Hearts'),
spades = _('Spades')
class Rank(object):
j = _('Jack')
q = _('Queen')
k = _('King')
a = _('Ace')
class Card(object):
# ...
私のディレクトリ構造は次のとおりです。
.
├── i18n
│ ├── en
│ │ └── LC_MESSAGES
│ │ └── messages.mo
│ ├── en.po
│ ├── en_US.po
│ ├── ro
│ │ └── LC_MESSAGES
│ │ └── messages.mo
│ ├── ro.po
│ └── ro.pot
├── Makefile
├── README.md
└── src
├── card.py
├── card.pyc
├── deck.py
└── main.py
andファイルを生成するためにxgettext
andを使用しました。msgfmt
.po
.mo
問題は、単一の言語のみをロードすると、テキストが翻訳されることです (出力が表示される前にこれを行う必要があります)。
#! /usr/bin/env python2.7
import gettext
if __name__ == '__main__':
ro = gettext.translation('messages', localedir='../i18n', languages=['ro'])
ro.install()
import card
x = card.Rank()
print x.j, x.a, x.q, x.k
しかし、その場で言語を変更したい場合、上記の最初のコード スニペットによって作成された出力は翻訳されません。
私が間違っていることは何ですか?ドキュメントから何が間違っていると理解しましたか?