在Python-Fu中,N_()包裹字符串有什么作用?
<TL;DR>
这个是用在GTK+和GIMP的图形界面工具包中的国际化功能。文档链接是:N_()
</TL;DR>
我在做Python-Fu的时候,常常看到一些字符串被N_()
包裹,比如:N_("一些随机字符串")
。
但在另一个插件里,N_()
就没有了,直接用"一些随机字符串"
也能正常工作。
这是怎么回事呢?我查了一下,但没有找到相关的信息。如果有Python方面的专家能帮我解答一下,我会非常感激,因为我对这方面还比较陌生。谢谢!
<< 编辑 >>
这是GIMP 2.8的一个Python插件注册函数调用。每个插件都需要这个,它会把插件注册到图形界面中,并在你指定的第12个参数里显示在菜单系统中。
这和GIMP早期版本的参数顺序或者Script-Fu(基于Scheme的,比较复杂)是不同的。
register(
"omnicyde_btn_metal_ring",
N_("Badass Glossy Metal Ring Button"),
"This is going to be so incredibly sweet",
"Omnicyde",
"Omnicyde",
"2014",
"_BtnMetalRing",
"",
[],
[],
btn_metal_ring,
menu="<Toolbox>/Omnicyde/Buttons",
domain=("gimp20-python", gimp.locale_directory)
)
所以,在一些插件中会有一个N_()包裹着字符串,而在另一些插件中同样的字符串在参数列表里就没有这个包裹。两种写法都能正常工作。
我以为这可能是Python的核心结构之类的,因为我对这方面还不太熟悉。不过,我对Python-Fu也不太了解。这也有可能是GIMP的特性,或者是Python-Fu的特性……
1 个回答
4
正如评论中提到的,N_
是一个在 gi18n.h
文件中定义的国际化宏。gi18n 使用的是 gettext 库。
http://opensource.apple.com/source/ChatServer/ChatServer-37.1/libraries/glib-2.4.5/glib/gi18n.h
至于 gettext_noop,你可以在这里查看它的用法: http://www.gnu.org/software/gettext/manual/html_node/Special-cases.html