dim*_*414 6 python mercurial magic-function
在Mercurial中,许多扩展将其帮助/语法字符串包装在对下划线函数的调用中,如下所示:
_('[OPTION] [QUEUE]')
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为它似乎没有必要(编写扩展指令没有提到它),并且似乎没有在类中定义_,所以我想知道这是否是一些特殊的语法我不喜欢不明白,或许可以用另一种方式来说lambda,或者也许是身份功能?另外,我想知道这种方法的好处(无论它是什么)仅仅是文档建议的原始字符串.
我在Python文档中看到的任何内容都没有提到这样的函数,所以我不确定这是一个Python问题还是一个Mercurial问题.
以下是使用此结构的两个示例(查看cmdtable文件底部附近的字典)
看看第45行:
from mercurial.i18n import _
Run Code Online (Sandbox Code Playgroud)
这是国际化包gettext中的通常缩写,也可能是其他包,对于将其参数的转换返回到程序当前运行的语言的函数.它的缩写是_为了方便,因为它几乎用于每一个消息显示给用户.
看起来像Mercurial将它包装在自己的模块中.("i18n"代表"国际化",因为"i"和"n"之间有18个字母.)
_(单个下划线的函数名称)通常与国际化相关联,因为gettextGNU方法的先例也在Python的标准库中找到了一个位置(相同的架构,完全不同的实现) - 根据模块的文档,
gettext.install(domain[, localedir[, unicode[, codeset[, names]]]])
Run Code Online (Sandbox Code Playgroud)
这将
_()在Python的内置命名空间中安装该函数,该命名空间基于传递给函数translation()的domain,localedir和codeset.unicode标志将传递给生成的转换对象的install()方法.对于names参数,请参阅转换对象的install()方法的说明.
如下所示,您通常将应用程序中的字符串标记为要转换的字符串,方法是将它们包装在对
_()函数的调用中,如下所示:
print _('This string will be translated.')
Run Code Online (Sandbox Code Playgroud)
为方便起见,您希望将
_()函数安装在Python的内置命名空间中,以便在应用程序的所有模块中轻松访问它.
正如@ptomato所提到的,Mercurial通过命名_他们自己用于相同国际化目的的等效功能来遵循这一传统.
还有一个单独的传统_用作"我不关心"的标识符,如
fee, fie, _, _, foo, _, fum = thesevenitemstuple
Run Code Online (Sandbox Code Playgroud)
但当然你最好不要在同一个代码中同时使用这两种传统;-)
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |