我一直在学习开发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);
在上面的代码中,它的替代方式和外观如何?
答案 0 :(得分:7)
GTK + 3已移至freedesktop.org Icon Naming Specification和国际化标签。以Gtk.Stock.OPEN为例。 GNOME Developer documentation for GTK_STOCK_OPEN提供了两个替换:
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 )
label方法使用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()