GTK文件选择器对话框是否自带按钮与标题的本地化默认字符串?
GTK文件选择器的本地化默认文本问题
背景
- Windows和macOS的系统内置文件选择器,无需手动设置按钮或标题文本,会自动根据系统语言完成本地化。
- Linux下多数应用使用GTK,但GTK文件选择器要求开发者手动传入按钮和标题文本,示例代码如下:
dialog = gtk_file_chooser_dialog_new ("Open File", parent_window, action, "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL);
若留空或设为NULL,按钮和标题将无任何文本,不会显示默认值。
问题
GTK是否自带一套本地化的默认按钮和标题文本供开发者调用?
补充说明
- 不希望使用gettext:该方案需要应用自行维护各语言翻译库,无法覆盖GTK支持的所有语言。
- GTK消息对话框(如
gtk_message_dialog_new)可通过传入GTK_BUTTONS_OK_CANCEL这类常量,在用户安装对应语言包后自动显示翻译后的按钮文本,但文件选择器似乎没有类似机制。
答案
GTK确实提供了获取本地化默认文本的方式,你可以借助GTK内置的翻译资源,通过对应API获取系统已安装语言包中的标准文本,无需自行维护翻译文件。
不同GTK版本的实现方式
GTK 2
使用gtk_stock_lookup()获取stock项目的本地化标签:
// 获取"打开"按钮的本地化文本 const gchar *open_label = gtk_stock_lookup(GTK_STOCK_OPEN)->label; // 获取"取消"按钮的本地化文本 const gchar *cancel_label = gtk_stock_lookup(GTK_STOCK_CANCEL)->label; // 创建对话框时传入这些文本 dialog = gtk_file_chooser_dialog_new(gtk_stock_lookup(GTK_STOCK_OPEN)->label, parent_window, GTK_FILE_CHOOSER_ACTION_OPEN, cancel_label, GTK_RESPONSE_CANCEL, open_label, GTK_RESPONSE_ACCEPT, NULL);
GTK 3+
GTK 3开始逐步废弃stock items,推荐通过预定义动作获取本地化标签:
// 获取"打开"动作的本地化标签 GActionGroup *app_actions = gtk_application_get_action_group(GTK_APPLICATION(app), "win"); GAction *open_action = g_action_group_get_action(app_actions, "open"); const gchar *open_label = gtk_action_get_label(GTK_ACTION(open_action)); // 取消按钮可直接调用GTK内置翻译 const gchar *cancel_label = _("Cancel");
这里的_()会调用GTK的内置翻译域,只要系统安装了对应语言包,就能自动返回本地化文本。
GTK 4
GTK 4中GtkFileChooserDialog被GtkFileChooserNative替代,它会优先使用桌面环境的原生文件选择器(自动继承系统本地化文本);若回退到GTK自带的文件选择器,仍可通过上述方式获取内置翻译文本。
内容的提问来源于stack exchange,提问作者Bernard
相关产品推荐
相关产品推荐

