在Python-Fu中,N_()包裹字符串有什么作用?

2 投票
1 回答
840 浏览
提问于 2025-04-17 20:42

<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

撰写回答