我应该在hook_menu的描述中使用t()吗?


11

我一直将t()用于hook_menus标题和描述,如下所示:

$items['some-path'] = array(
    'title' => t('My Page Title'),
    'description' => t('This is a description about what my page is for'),
    'page callback' => 'profile_user_page',
);

这对我来说很有意义,因此用户可以根据需要将标题和说明翻译成不同的语言。

然而此评论上DO模块的评论则说:

不,那是错误的,不要那样做-hook_menu()中的描述永远不要使用t()。

这是什么原因,这实际上是最佳做法吗?

同样,如果这是真的,那么我们也应该不使用t()作为标题吗?


显然,这不应该使用,但是如果您在hook_menu帮助页面上搜索“ description'=> t(”,则出现6次,因此很显然,这是一个常见错误!
Felix Eve

1
常见与否,这不是借口;)而且这些事件都在注释中-人们可以随意在这里犯错。
Mołot

1
@Mołot他们可以随意在这里犯错误,但是许多新用户将复制并粘贴该代码,因此这将继续是常见错误。我认为具有DO管理员权限的人应编辑这些注释以删除t()。
菲利克斯·夏娃


1
好建议。完成
菲利克斯·夏娃

Answers:


17

请参阅著名位置的字符串:内置菜单,权限,日志消息和.info文件社区文档:

Drupal 6和7菜单系统以英语存储菜单项的标题和描述。这允许系统缓存数据,但可以按需使用各种语言向用户显示。为此,您不应该在hook_menu()实现中的菜单项标题或描述上使用t()。此外,您应该尝试对这两个键使用文字字符串(而不是动态字符串),以便翻译模板提取器可以找到您使用的字符串。

强调我的。


我要补充一点:仅在title callback未设置的情况下,因为默认情况下title callbackt()功能
milkovsky

1
@milkovsky如果设置了标题回调,则应注意t()并且您仍不应在hook menu()缓存中使用它。
Mołot

11

如果您看到hook_menu参数的文档。

  • “标题”:必填。菜单项的未翻译标题。
  • “ title callback”:产生标题的功能;默认为t()。如果只需要输出原始字符串,请将其设置为FALSE。
  • “标题参数”:发送给t()或自定义回调的参数,如上所述,使用路径组件替换。
  • “描述”:菜单项的未翻译的描述。

默认情况下,标题回调是t函数。因此它总是被翻译。


7

由于不再需要Drupal 6。

请阅读https://drupal.org/node/140311。引用:

从6.x版本开始,Drupal内部处理菜单标题和描述到用户本地语言的翻译。如果提供了描述,则始终使用t()进行翻译;无法传递用于占位符替换的其他数据(在D5及以前的版本中,不建议传递替换-进行此更改后,菜单系统直接执行该规则)。默认情况下,标题用t()翻译,但是可以通过使用新的'title arguments'属性来替换t()样式的字符串。您也可以选择用自己的自定义回调替换t()。


6

您不应t()hook_menu()实现中使用,因为t()稍后会自动调用它,否则会导致双重翻译。


*请注意,如果title callback在hook_menu中添加a ,如果没有t,则标题回调负责翻译字符串。
AyeshK 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.