返回介绍

生成语言目录

发布于 2025-01-02 21:53:54 字数 3894 浏览 0 评论 0 收藏 0

该过程的下一步是在除了原始语言(在本例中为英语)之外,为每种语言创建一份翻译。 我要从添加西班牙语(语言代码 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'

使用为西班牙语配置的浏览器运行该应用或返回 eslocaleselector 函数,将使所有文本在使用该应用时显示为西班牙文。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文