2015-05-11 8 views
2

Я использую Flask Babel, чтобы сделать I18N для проекта администрирования фляг. Но не может заставить его работать, даже с простым шаблоном. Вот коды, инициализировать столпотворение первым,Flask Babel не работает

app=Flask(__name__,template_folder='templates') 
app.config.from_object('config') 
csrf=CsrfProtect(app) 
bcrypt=Bcrypt(app) 
db=SQLAlchemy(app) 
babel=Babel(app) 
@babel.localeselector 
def get_locale(): 
    return 'zh_Hans_CN' 

Добавить страницу администратора конструктов и добавить I18N, я также пытаюсь lazy_gettext(). Не работаю.

# Create admin 
admin = admin.Admin(app, 'iInvest:', index_view=MyAdminIndexView(), base_template='my_master.html') 
# Add view 
admin.add_view(UserManageView(User, db.session, gettext(u'User Management'))) 

Используйте столпотворение, чтобы получить I18N и добавить перевод,

os.system(pybabel + ' extract -F babel.cfg -k lazy_gettext -o messages.pot iInvest/') 
os.system(pybabel + ' init -i messages.pot -d translations -l zh_Hans_CN') 
os.unlink('messages.pot') 

Он находит все тексты и добавлять переводы вручную, а затем скомпилировать его,

os.system(pybabel + ' compile -f -d translations') 

перезагрузки сервера и проверьте страницу, ничего переводить. Я пробовал другие языки, никто из них не работает. Какова возможная причина? Вот полный код https://github.com/XiaokunHou/FlaskProject

+0

Если вы запускаете команды pybabel вручную, есть ли сообщения об ошибках/предупреждениях? –

+0

@ 1.618 никаких ошибок, все кажется хорошо. – Xiaokun

+0

@ 1.618 это потому, что места моих переводов ошибочны ... – Xiaokun

ответ

4

Я нахожу, где я был неправ. Папка переводов находится не в том месте. Он должен под iInvest (который является приложением в других случаях).

pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot iInvest/ 
pybabel init -i messages.pot -d iInvest/translations -l zh_Hans_CN 
pybabel compile -f -d iInvest/translations 
+0

Спасибо dudu, вы сохранили мой день: я использую 'zh_CN' вместо' zh_Hans_CN' в 'pybabel init' и возвращая' zh_CN' в украшенном ' get_locale'. В результате все 'lazy_gettext' терпят неудачу (т. Е. Исходный текст отображается вместо переведенного), пока работает все' gettext'. Фланец Вавилон (и/или сам Вавилон) действительно странный ... –

Смежные вопросы