2017-03-22 13 views
0

私はフラスコのWebプロジェクトをbabel(Ubuntu 16.04/python 2.7.12を使用)で翻訳しようとしています。テーブルを除いて、すべてうまくいくようです。列の名前は翻訳されません。誰かがそれをどのように働かせるか知っていますか?フラスコのベベル:フラスコテーブルが翻訳されていません

私の.py例:

from flask import Flask, render_template 
from flask_script import Manager 
from flask.ext.babel import Babel, gettext 
from flask_table import Table, Col 

app = Flask(__name__) 
manager = Manager(app) 
babel = Babel(app) 

class ItemTable(Table): 
    col1 = Col(gettext('Apple')) 
    col2 = Col(gettext('Banana')) 
    col3 = Col(gettext('Pear')) 

class Item(object): 
    def __init__(self, col1, col2, col3): 
     self.col1 = col1 
     self.col2 = col2 
     self.col3 = col3 

@babel.localeselector 
def get_locale(): 
    return 'de' 

@app.route('/') 
def index(): 
    items = [] 
items.append(Item('bla', 'bla', 'bla')) 
table = ItemTable(items) 

    test = gettext("This is a string.") 
    return render_template('index.html', test=test, table=table) 

if __name__ == '__main__': 
    app.run(debug=True) 

HTMLファイル:

ここ
<h1>{{gettext("Hello World!")}}</h1> 
<h2>{{test}}</h2> 
{{table}} 

、私はドイツ語への翻訳が作業を行うかどうかをテストしたいので、単に 'ド' を返しますget_locale translationsフォルダとbabel.cfgが配置され、pybabel extract/init/compileが動作し、変換されたmessages.poファイルに文字列Apple/Banana/Pearが現れます。しかし、ページが読み込まれると "Hello World"と "test"は翻訳されますが、列文字列は変換されません。

どうすればいいですか?

答えて

0

私は、同じ問題に遭遇するすべての人にとって、解決策を見出しました。キーはItemTableのコンストラクタを上書きすることです:

class ItemTable(Table): 
    col1 = Col('') 
    col2 = Col('') 
    col3 = Col('') 

    def __init__(self, items): 
     super(ItemTable, self).__init__(items) 
     self.col3.name = gettext('Apple') 
     self.col2.name = gettext('Banana') 
     self.col3.name = gettext('Pear') 

実際はwtformsにも同じことが適用されます。これは動作しません:

class TestForm(Form): 
    field1 = TextField(gettext('fieldlabel1')) 
    field2 = TextField(gettext('fieldlabel2')) 

しかし、この処理が行われます。

class TestForm(Form): 
    field1 = TextField('') 
    field2 = TextField('') 

    def __init__(self, formdata=None): 
     if formdata: 
      super(TestForm, self).__init__(formdata) 
     else: 
      super(TestForm, self).__init__() 
     self.field1.label.text = gettext('fieldlabel1') 
     self.field2.label.text = gettext('fieldlabel2') 
関連する問題