我想在我的 Mac OS X 10.7 上的 Python 应用程序中翻译字符串。我可以导入gettext
模块,但找不到工具pygettext.py
和msgfmt.py
,根据 Python 文档,它应该在我的 Python 安装中的某个位置。
Mac OS X 10.7 上预装的 Python 版本是否缺少这些工具,如果是,我该如何获取它们?
谢谢。
我想在我的 Mac OS X 10.7 上的 Python 应用程序中翻译字符串。我可以导入gettext
模块,但找不到工具pygettext.py
和msgfmt.py
,根据 Python 文档,它应该在我的 Python 安装中的某个位置。
Mac OS X 10.7 上预装的 Python 版本是否缺少这些工具,如果是,我该如何获取它们?
谢谢。
使用 python 3 和 MacOS >= 10.9,gettext
通过自制软件安装不会链接库,这将产生错误Can't find msgfmt
。
这有助于:
$ brew install gettext # if not already done
$ brew link gettext --force
这两个脚本都位于 Python 源代码的杂项工具目录中。该目录通常不包含在 Python 的二进制安装中,例如 Apple 在 OS X 中提供的那些。但是,很容易从 Python 源版本单独下载它们;在此处查看最新版本。对于当前的 Python 2.7.3 版本,您可以执行以下操作:
$ curl -O http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar -xf Python-2.7.3.tgz
$ cd Python-2.7.3
$ cd Tools/i18n/
$ ls
makelocalealias.py msgfmt.py* pygettext.py*
从 Python 3.2 开始,该Tools
目录由 python.org OS X 二进制安装程序安装。你可以在 Python 框架中找到它:
/Library/Frameworks/Python.framework/Versions/3.2/share/doc/python3.2/examples/Tools
创建符号链接
sudo ln -s /Library/Frameworks/Python.framework/Versions/3.7/share/doc/python3.7/examples/Tools/i18n/pygettext.py /usr/local/bin/pygettext
如果您在 Linux 中正确安装了 Python,您应该能够从命令行访问二进制版本。因此,要制作 .pot 文件,您可以键入:
$> pygettext [options] source_file_list
我发现我有两个版本的 pygettext,一个用于 2.7,另一个用于 3.2,但它们的工作方式似乎几乎相同。要从 .po 文件创建 .mo 文件:
$> msgfmt [options] file.po
但您需要确保您不会意外使用 gnu 版本。msgfmt 的 Python 版本要简单得多。这两个命令都有帮助,因此您可以使用以下命令检查选项(和版本):
$> pygettext --help
和
$> msgfmt --help
如果有疑问,按照上面的建议下载 Python 源代码是一种带大括号的方法。
我自己仍在寻找我自己的方式,所以如果有人知道更好,请添加您的评论:)
通过使用find . -name pygettext.py/msgfmt.py
,我在macOS上找不到这两个文件,无论是在系统python安装(/System/Library/Frameworks/Python.framework/Versions
)还是在Anaconda Python发行版中。
但是我们总是可以直接从 Python 源代码中下载这两个文件。此时,它们位于:https ://github.com/python/cpython/tree/master/Tools/i18n
此外,pygettext.py
和msgfmt.py
是 GNUgettext
工具集的模仿物:xgettext
和msgfmt
. 您还可以检查这些 GNU 工具集是否已经安装。( type -a xgettext/msgfmt
)
如果没有,您可以使用MacPort的port
命令或Anaconda的conda
命令进行安装。
port install gettext
conda install gettext