Gtk.stock 已弃用,有什么替代方案?

问题描述 投票:0回答:1

我一直在学习使用 Gtk 进行开发,网上的大多数示例都建议使用 Gtk.stock 图标。然而,它的使用会产生警告,表明它已被弃用,并且我找不到这些图标的替代品。

代码示例是:

    open_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.OPEN)
    open_button.clicked.connect (openfile)

    new_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.NEW)
    new_button.clicked.connect (createNew)

    save_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.SAVE)
    save_button.clicked.connect (saveFile)

这会产生错误:

   /tmp/text_editor-exercise_7_1.vala.c:258:2: warning: 'GtkStock' is deprecated [-Wdeprecated-declarations]
     _tmp1_ = (GtkToolButton*) gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);

哪个是替代方案以及它在上面的代码中的外观如何?

gtk vala genie
1个回答
11
投票

GTK+3 已转移到 freedesktop.org 图标命名规范 和国际化标签。以 Gtk.Stock.OPEN 为例。 GTK_STOCK_OPEN 的 GNOME 开发者文档 给出了两个替换:

GTK_STOCK_OPEN 自 3.10 版本起已被弃用,不应在新编写的代码中使用。使用命名图标“文档打开”或标签“_Open”。

命名图标法

命名的图标方法类似于:

var open_icon = new Gtk.Image.from_icon_name( "document-open",
                                              IconSize.SMALL_TOOLBAR
                                              )
var open_button = new Gtk.ToolButton( open_icon, null )

标签法

标签方法利用

gettext
将标签翻译为程序当前的运行时语言。这由标签前的下划线表示。您程序中的行将是:

var open_button = new Gtk.ToolButton( null, dgettext( "gtk30", "_Open") )

gettext
使用域,即包含翻译的文件。 Gtk+3 域是
gtk30
。您还需要在程序开头添加一行,将 C 语言的默认区域设置(美国英语 ASCII)更改为运行时环境的区域设置:

init
    Intl.setlocale()

要编译 Genie 程序,您需要为

gettext
设置默认域。这通常设置为空:

valac -X -DGETTEXT_PACKAGE --pkg gtk+-3.0 my_program.gs

当您运行程序时,您会将“_Open”翻译为您的语言环境。您还可以更改区域设置。如果您安装了法语语言环境,则使用以下命令运行程序:

LC_ALL=fr ./my_program

将以法语显示“_Open”标签。

您可能会在示例中看到

_( "_OPEN" )
_()
是一个类似于
dgettext
的函数,但使用默认域。您可能希望保留您自己的程序的翻译文件的默认域。使用
_( "_translate me" )
dgettext( "mydomain", "_translate me" )
打字要少一些。要在 Genie 中设置默认域,请在
init
:

之前添加一行
const GETTEXT_PACKAGE:string = "mydomain"

init
    Intl.setlocale()
© www.soinside.com 2019 - 2024. All rights reserved.