使应用程序自动检测系统语言

使应用程序自动检测系统语言
  1. 在 Linux 系统(如 Ubuntu)下开发的应用程序应如何操作才能自动检测系统语言?有些应用程序(如 Liferea)会自动更改其语言以匹配系统语言,而不会更改程序本身的任何首选项:在此处输入图片描述这应该是所有程序的“默认”行为吗?

  2. 程序中是否应该有一个选项以便让用户选择语言?

  3. 这些翻译都是程序自带的吗?如果用户设置的系统语言在程序的翻译中不可用怎么办?

  4. 这是 Ubuntu 或大多数 Linux 发行版特有的吗?

答案1

我知道使用 Quickly 和 Launchpad 进行的应用程序开发支持 Translations 来实现这一点。我不是专家,所以除了我的回答之外,请查看以下链接:

http://www.gnu.org/software/gettext/

https://help.launchpad.net/Translations

我的应用程序导入了 gettext 模块,它允许我标记将在程序中向用户显示的字符串。当我的程序通过 Quickly 提交到 Launchpad 时,Launchpad 设置为自动扫描源代码并为标记的字符串生成特殊的翻译模板文件。然后,Kind Launchpad 用户(或开发人员)可以使用模板为他们想要的每个字符串和语言生成翻译。然后,这些翻译文件可以同步到您的源分支并在发布前合并。在运行时,gettext 模块会根据您的系统语言环境用适当的翻译替换标记的字符串。

总而言之,以下是该流程的列表:

  • 将 gettext 导入到你的程序中
  • 标记需要翻译的字符串
  • 在 Launchpad 中设置翻译
  • 翻译模板并同步到源

这是我的程序的标题,我通过 locale 导入 gettext (请注意,Quickly 为我添加了所有这些!添加了 locale 和 bindtextdomain 是因为它被放在 /opt/extras.ubuntu.com 中,我认为):

import locale
from locale import gettext as _
locale.bindtextdomain('drawers', '/opt/extras.ubuntu.com/drawers/share/locale')
locale.textdomain('drawers')

_("text to be translated")现在我只需在整个程序中标记要翻译的文本。

答案2

将来,即使它们相关,我建议为每个问题单独提出问题。无论如何,我都会尝试回答它们:

在 Ubuntu 等 Linux 系统下开发的应用程序该怎么做才能自动检测系统语言?

您只需gettext在您的应用程序中进行初始化即可。得到文本是 Ubuntu 和大多数其他基于 Linux 的发行版使用的标准国际化和本地化技术(如果我们将 Android 视为发行版,那么它是唯一的例外)。

在最基本的情况下,使用 Python

import gettext
from gettext import gettext as _
locale.bindtextdomain('yourapp', '/usr/share/locale')
locale.textdomain('yourapp')

笔记:

  • 在 Python 中,为了支持/opt安装,您需要使用locale库而不是gettext(对于大多数实际目的而言,它们是等效的)
  • 几乎所有编程语言都有 gettext 绑定,不仅仅是 Python。

这应该是所有程序的“默认”行为吗?

是的。

程序中是否应该有一个选项以便让用户选择语言?

不可以。如果您想要有这样的选项,您就得自己实现。惯例是每个用户只有一种语言,您只能在一个地方更改它,这会影响系统中的所有应用程序。

所有这些翻译都是随程序本身一起进行的吗?

是的,它们以二进制文件的形式随应用程序一起发送.mo,每种翻译语言一个。

如果用户设置的系统语言在程序的翻译中不可用,该怎么办?

那么 gettext 默认使用英语作为后备。

这是 Ubuntu 或大多数 Linux 发行版特有的吗?

这是 Linux 发行版的标准行为。

相关内容