生成语言目录
该过程的下一步是在除了原始语言(在本例中为英语)之外,为每种语言创建一份翻译。 我要从添加西班牙语(语言代码 es
)开始,所以这样做的命令是:
(venv) $ pybabel init -i messages.pot -d app/translations -l es
creating catalog app/translations/es/LC_MESSAGES/messages.po based on messages.pot
pybabel init
命令将 messages.pot 文件作为输入,并将语言目录写入 -d
选项中指定的目录中, -l
选项中指定的是翻译语言。 我将在 app/translations 目录中安装所有翻译,因为这是 Flask-Babel 默认提取翻译文件的地方。 该命令将在该目录内为西班牙数据文件创建一个 es 子目录。 特别是,将会有一个名为 app/translations/es/LC_MESSAGES/messages.po 的新文件,是需要翻译的文件路径。
如果你想支持其他语言,只需要各自的语言代码重复上述命令,就能使得每种语言都有一个包含 messages.po 文件的存储库。
在每个语言存储库中创建的 messages.po
文件使用的格式是语言翻译的事实标准,使用的格式为 gettext 。 以下是西班牙语 messages.po 开头的若干行:
# Spanish translations for PROJECT.
# Copyright (C) 2017 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-09-29 23:23-0700\n"
"PO-Revision-Date: 2017-09-29 23:25-0700\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: es\n"
"Language-Team: es <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\n"
#: app/email.py:21
msgid "[Microblog] Reset Your Password"
msgstr ""
#: app/forms.py:12 app/forms.py:19 app/forms.py:50
msgid "Username"
msgstr ""
#: app/forms.py:13 app/forms.py:21 app/forms.py:43
msgid "Password"
msgstr ""
如果你跳过首段,可以看到后面的是从 _()
和 _l()
调用中提取的字符串列表。 对每个文本,都会展示其在应用中的引用位置。 然后, msgid
行包含原始语言的文本,后面的 msgstr
行包含一个空字符串。 这些空字符串需要被编辑,以使目标语言中的文本内容被填充。
有很多翻译应用程序与 .po
文件一起工作。 如果你擅长编辑文本文件,量少的时候也就罢了,但如果你正在处理大型项目,可能会推荐使用专门的编辑器。 最流行的翻译应用程序是开源的 poedit ,可用于所有主流操作系统。 如果你熟悉 vim,那么 po.vim 插件会提供一些键值映射,使得处理这些文件更加轻松。
在添加翻译后,你可以在下面看到一部分西班牙语 messages.po :
#: app/email.py:21
msgid "[Microblog] Reset Your Password"
msgstr "[Microblog] Nueva Contraseña"
#: app/forms.py:12 app/forms.py:19 app/forms.py:50
msgid "Username"
msgstr "Nombre de usuario"
#: app/forms.py:13 app/forms.py:21 app/forms.py:43
msgid "Password"
msgstr "Contraseña"
本章的 下载包 中包含所有翻译,此文件当然也在其中,所以你不必担心这部分的翻译工作。
messages.po 文件是一种用于翻译的源文件。 当你想开始使用这些翻译后的文本时,这个文件需要被编译成一种格式,这种格式在运行时可以被应用程序使用。 要编译应用程序的所有翻译,可以使用 pybabel compile
命令,如下所示:
(venv) $ pybabel compile -d app/translations
compiling catalog app/translations/es/LC_MESSAGES/messages.po to
app/translations/es/LC_MESSAGES/messages.mo
此操作在每个语言存储库中的 messages.po 旁边添加 messages.mo 文件。 .mo 文件是 Flask-Babel 将用于为应用程序加载翻译的文件。
在为西班牙语或任何其他添加到项目中的语言创建 messages.mo 文件之后,可以在应用中使用这些语言。 如果你想查看应用程序以西班牙语显示的方式,则可以在 Web 浏览器中编辑语言配置,以将西班牙语作为首选语言。 对 Chrome,这是设置页面的高级部分:
如果你不想更改浏览器设置,另一种方法是通过使 localeselector
函数始终返回一种语言来强制实现。 对西班牙语,你可以这样做:
app/__init__.py
:选择最佳语言。
@babel.localeselector
def get_locale():
# return request.accept_languages.best_match(app.config['LANGUAGES'])
return 'es'
使用为西班牙语配置的浏览器运行该应用或返回 es
的 localeselector
函数,将使所有文本在使用该应用时显示为西班牙文。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论