gpt4 book ai didi

c - 如何在 GTK 中进行按钮标签翻译?

转载 作者:行者123 更新时间:2023-12-04 10:53:58 24 4
gpt4 key购买 nike

我正在尝试在 GTK 3 中创建一个简单的对话框窗口,其中按钮标签是根据所选语言设置的。

这是我的程序 gtklocale.c :

#include <glib/gi18n.h>
#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
GtkWidget *dialog;

gtk_init(&argc, &argv);

dialog = gtk_dialog_new_with_buttons(
"Title",
NULL,
0,
_("_Cancel"),
GTK_RESPONSE_CANCEL,
_("_OK"),
GTK_RESPONSE_OK,
NULL);

gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
return 0;
}

我编译这个程序
gcc -Wall -o gtklocale -Wall $(pkg-config --cflags gtk+-3.0) gtklocale.c $(pkg-config --libs gtk+-3.0)

这是我的语言环境:
$ locale -a
C
C.UTF-8
en_US.utf8
POSIX
sv_SE.utf8

当我运行程序时
LC_ALL=sv_SE.utf8 ./gtklocale

显示此对话窗口:

enter image description here

我希望“取消”被翻译成瑞典语“Avbryt”,但事实并非如此。

有什么不见了?

最佳答案

您在这里使用的是 _()宏,即直接 g_gettext() ,因此翻译必须由您的应用程序提供;它们不会在库域(库 .mo 文件)中搜索,而只能在 中搜索您的申请 域(即您的应用程序 .mo 文件)

Gtk3 确实提供了一些“库存”翻译字符串供应用程序使用,但它们在 Gtk 3.10 中已被弃用。从 Gtk 3.10 开始,建议应用程序提供自己的 UI 字符串翻译,而不是依赖 Gtk 提供的翻译。

为了反射(reflect)这一点,开发人员更新了 gtk_dialog_new_with_buttons 的文档:请参阅 Gtk 3.8 中的文档和 Gtk 3.10并进行比较。简而言之,新文档被制作成 不是 使用 Gtk 自己的翻译!

当然,您仍然可以使用 Gtk 自己的翻译,尽管已弃用,但可以通过以下方式之一使用:

  • 使用股票标识符代替按钮标签:
  • dialog = gtk_dialog_new_with_buttons(
    "Title", NULL, 0,
    GTK_STOCK_CANCEL,
    GTK_RESPONSE_CANCEL,
    GTK_STOCK_OK,
    GTK_RESPONSE_OK,
    NULL);
  • 调用 g_dgettext() “gtk30”域:
  • dialog = gtk_dialog_new_with_buttons(
    "Title", NULL, 0,
    g_dgettext("gtk30", "_Cancel"),
    GTK_RESPONSE_CANCEL,
    g_dgettext("gtk30", "_OK"),
    GTK_RESPONSE_OK,
    NULL);

    希望能帮助到你!

    关于c - 如何在 GTK 中进行按钮标签翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59327570/

    24 4 0