标签: gettext

如何使用 gettext 使 QML 文件可翻译

我想编写一个基于 Python ( PySide ) 和QMLQtQuick应用程序。

我知道 Qt 应用程序有自己的翻译技术,但我想坚持使用gettext来解决这个问题。我想知道是否可以:

  • 在某种程度上翻译标记串在QML文件的gettext工具可以解压缩到一个.pot文件
  • 在运行时让 gettext 翻译 QML 文件。

我知道这是在Unity 2D 代码中完成的,在 C++ 中,所以我想知道如何使用 Python 完成它。

注意:我说的是在运行时只使用 gettext,而不是在 gettext 和 Qt Linguist 格式之间进行转换。

internationalization qt application-development gettext qml

10
推荐指数
1
解决办法
1474
查看次数

如何从 /opt 进行 Glade 加载翻译

我创建了一个应用程序,希望通过Ubuntu 应用程序开发人员流程提交。该过程的要求之一是安装后,所有文件都进入该/opt/extras.ubuntu.com/<appname>目录。

通过改变包装并在其他人的帮助下,我已经实现了这一点,但现在我面临一个新问题:/opt从我的应用程序运行的翻译没有被加载。

会发生以下情况:除非另有说明,否则包含应用程序翻译的二进制文件(MO 文件)是从/usr/share/locale(或在 Ubuntu 的情况下,从/usr/share/locale-langpack)加载的,但在我的应用程序中,由于/opt要求,它们安装在/opt/extras.ubuntu.com/qreator/locale.

这在理论上很好,因为gettext允许指定一个替代位置来加载翻译,所以我添加了bindtextdomain调用来实现这一点:

import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
Run Code Online (Sandbox Code Playgroud)

这在一定程度上很有效:在命令行上输出的所有消息都按预期翻译。但这并没有解决主要问题:从 UI Glade 加载翻译需要再次指定翻译域(相当于gettext.textdomain('qreator')上面的调用),但它不允许指定从哪里加载翻译(即 Glade 相当于bindtextdomain,可悲的是不存在)。这是我正在使用的代码的摘录:

builder = Gtk.Builder()
builder.set_translation_domain('qreator')
# There isn't a way to tell glade to load translations from
# somewhere else than /usr/share/locale here
builder.add_from_file(ui_filename)
Run Code Online (Sandbox Code Playgroud)

这实质上意味着如果您的应用程序安装在/opt.

我几乎被困在这一点上。关于如何使 Glade 从而/opt/extras.ubuntu.com/qreator/share/locale/不是加载翻译的任何想法 …

python application-development glade gettext localization

9
推荐指数
1
解决办法
1278
查看次数

如何翻译通过 snap 包安装的程序?

我在 Ubuntu 16.10 Yakkety Yak 中通过 snap 包安装了 VLC。但是安装是用英语完成的(我的 Ubuntu 版本是西班牙语)

基本上在Snap (snapcraft?) 和翻译的应用程序以及它如何更改 vlc (snap) 中的语言以及 VLC 的翻译文件中提出了相同的问题:

$ locate /vlc.mo
/snap/vlc/1/share/locale/ach/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/af/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/am/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/an/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ar/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ast/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/az/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/be/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/bg/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/bn/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/bn_IN/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/br/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/bs/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ca/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/cgg/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ckb/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/co/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/cs/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/cy/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/da/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/de/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/el/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/en_GB/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/es/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/et/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/eu/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/fa/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ff/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/fi/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/fr/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/fur/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ga/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/gd/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/gl/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/gu/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/he/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/hi/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/hr/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/hu/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/hy/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ia/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/id/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/is/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/it/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ja/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ka/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/kk/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/km/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/kn/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ko/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/ky/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/lg/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/lt/LC_MESSAGES/vlc.mo
/snap/vlc/1/share/locale/lv/LC_MESSAGES/vlc.mo …
Run Code Online (Sandbox Code Playgroud)

unity translation gettext snap

7
推荐指数
2
解决办法
803
查看次数

安装 glib 给出“你必须有 gettext 支持”

我正在尝试安装glib-2.37.6(也有同样的问题glib-2.32.1)并在配置过程中收到此错误:

您必须在 C 库中具有 gettext 支持,或者使用 GNU gettext 库。( http://www.gnu.org/software/gettext/gettext.html

不过,我以前构建过gettext。澄清一下,我正在尝试构建一些东西(导致gtk+),而没有在通常的地方实际安装,因为这是其他人使用的机器;相反,我使用--prefix=将所有内容放在我的主目录下的工作目录中。

我试着查看日志,看看我是否能得到关于是否需要设置其他任何东西的线索。我也尝试查看configure脚本,尽管我不是autoconf. 我发现发生错误是因为gt_cv_have_gettext没有设置为yes. 然后我寻找它应该在哪里设置,以便我可以知道它正在检查什么文件或任何内容。但是,除非我遗漏了某些东西,否则将其设置为的唯一命令就yes在此之下if

  if test "$gt_cv_func_dgettext_libc" != "yes" \
     || test "$gt_cv_func_ngettext_libc" != "yes" \
     || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
Run Code Online (Sandbox Code Playgroud)

config.log(看configure行号)表示该条件是假的,所以里面的一切(包括指令集gt_cv_have_gettext)被跳过。但是该测试似乎检查了三件事中没有任何一件遗漏。他们都不是;这是config.log错误发生前的最后一段:

configure:7982: checking for ngettext in libc
configure:8000: gcc -o conftest -g -O2   conftest.c  >&5
configure:8000: $? …
Run Code Online (Sandbox Code Playgroud)

glib gettext

6
推荐指数
1
解决办法
9072
查看次数

xgettext 输出到特定文件夹

我是新使用xgettext命令。所以我不知道我做错了什么。

我输入命令:

xgettext -n *.php -o --output='/home/public/sample'
Run Code Online (Sandbox Code Playgroud)

在我的脚本中,但出现错误:

xgettext: cannot create output file "--output=/home/public/sample": No such file or directory`
Run Code Online (Sandbox Code Playgroud)

但是当我运行时xgettext -n *.php- messages.po 文件会在我的当前目录中创建!有没有办法指定创建文件的位置messages.po

gettext

5
推荐指数
1
解决办法
1735
查看次数

如何将 .qm 和 .ts 文件转换为 .mo 或 .po?

我正在使用多种语言文件,有时源文件采用 .qm/.ts 格式。我正在使用 Qt Linguist/Gtranslator/POEdit,但据我所知,这些文件都不能将这些文件转换为 .mo/.po。有没有任何程序可以做到这一点?

translation qt gettext

3
推荐指数
1
解决办法
608
查看次数