2012-01-07 5 views
6

に外部ソースから私が翻訳し表示することを、データベース内の単語、私はテキストの限られた量を持っている...おそらく私は明白な解決策を見下ろすか、間違った方法を考えていますカタログ

を翻訳可能なテキストを取得します。フラスコ/ジンジャー/バベルwebappのユーザーに。例えば。 「実行中」は「活動」列の可能な値であり、ドイツ語ユーザーにとっては「laufen」でなければなりません。

テンプレートとコードの単語を抽出してカタログに入れますが、を追加するには、カタログにという単語を追加するにはどうすればよいですか?シンプルなテキストファイル抽出プログラムはありますか?

私が考えることができる唯一のことは、.pyファイルを作成して_( '...')行をたくさん置くことですが、それは間違っていると感じます...それは?

+0

データベースのこれらの単語は列挙型として定義されていますか? – plaes

+0

はい、ただし、enumやデータベースには制限されません。 もう1つのシナリオは外部システムです。多分JSONを私のシステムに送ります。特定の言葉で翻訳されていて、* my *コードには表示されませんが、入ってくるメッセージには表示されません。 これらの言葉はAPIの仕様を言いますが、私はgettextがピックアップするだけの '_( 'word')'としてコードに入れないようにしたいと思います。 私はちょうど1行に1語の痛みのテキストファイルを使用して、それに私自身の抽出機能を書きます。 – Florian

答えて

3

私はgettextの関数呼び出しのように私の "言葉" でMESSAGES.TXTを作成:

_('cycling') 
_('running') 

をし、Pythonのソースとして私babel.cfgにこれを追加しました愚かな、しかし動作します。

1

まず、http://flask.pocoo.org/snippets/4/で開始してください。

(バベルがそれらについて知っているので)第二に、あなたがデータベースに整数または列挙型としてこれらの「限定された」値を格納し、その後のコードでこれらすべての列挙型のためのルックアップテーブルを作成する必要があります。

i18n_val = {0: _('running'), ...} 
# Or multi-level dict with different categories: 
i18n_all = { 
    'activity': { 
    0: _('running'), ... 
    'foo': { 
    0: _('bar..'), ... 
    } 
} 

とアクセスただcontext processorsに登録し、すべてのテンプレートで利用可能なi18n_vali18n_all変数を作るために

{{ i18n_val[obj.activity] }} 
{{ i18n_all['activity'][obj.activity] }} 

:テンプレートから変換された文字列は、今と同じくらい簡単です。 、

[python: messages.txt] 

無地、シンプル:

+0

その2番目の部分は私が問題がある部分です。私はデータベースからすべてのテキストを取り出し、手作業でコードのどこかにコピーしたくありません。 最後のビット、私は実際に "|トランス"フィルターを使って解決しました。それは翻訳を検索します。 – Florian