8

我想在我的 Mac OS X 10.7 上的 Python 应用程序中翻译字符串。我可以导入gettext模块,但找不到工具pygettext.pymsgfmt.py,根据 Python 文档,它应该在我的 Python 安装中的某个位置。

Mac OS X 10.7 上预装的 Python 版本是否缺少这些工具,如果是,我该如何获取它们?

谢谢。

4

5 回答 5

14

使用 python 3 和 MacOS >= 10.9,gettext通过自制软件安装不会链接库,这将产生错误Can't find msgfmt

这有助于:

$ brew install gettext  # if not already done
$ brew link gettext --force

感谢https://stackoverflow.com/a/8785138/621690

于 2015-09-28T11:23:16.933 回答
8

这两个脚本都位于 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
于 2012-07-12T17:22:52.680 回答
1

创建符号链接

sudo ln -s /Library/Frameworks/Python.framework/Versions/3.7/share/doc/python3.7/examples/Tools/i18n/pygettext.py /usr/local/bin/pygettext
于 2019-03-29T20:36:52.263 回答
0

如果您在 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 源代码是一种带大括号的方法。

我自己仍在寻找我自己的方式,所以如果有人知道更好,请添加您的评论:)

于 2012-07-30T03:18:46.073 回答
0

通过使用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.pymsgfmt.py是 GNUgettext工具集的模仿物:xgettextmsgfmt. 您还可以检查这些 GNU 工具集是否已经安装。( type -a xgettext/msgfmt)

如果没有,您可以使用MacPortport命令或Anacondaconda命令进行安装。

port install gettext
conda install gettext
于 2019-06-07T04:22:18.230 回答