Drupal 6:为什么在t()中使用!令牌?

时间:2009-08-23 16:31:07

标签: drupal drupal-6

我正在阅读 Pro Drupal Development,第二版。它说以下是必要的:

t("Your favorite color is !color", array('!color' => "$color"));

但它也说了!占位符表示不对字符串进行任何转换。那么为什么不呢:

t("Your favorite color is $color");

感谢。

2 个答案:

答案 0 :(得分:12)

t()用于查找包含的字符串的翻译。如果您在该字符串中直接包含可变内容(示例中为$ color),则对于遇到但尚未翻译的任何新内容,翻译查找将失败。占位符允许翻译者仅翻译字符串的固定部分,并且仍允许注入可变内容。

修饰符'!','%','@'只是让你更多地控制 插入的方式,用'!'意思是字符串将按原样插入。

最明显的例子是数字:

如果你有

t("Number $count");

你用不同的数字称呼它几次,比如1,2,3,每次t()为不同的字符串寻找不同的翻译

  1. t('Number 1')
  2. t('Number 2')
  3. t('Number 3')
  4. t('Number !count', array('!count' => $count);
    

    它只会查找一个翻译,将数字“按原样”注入其中!

    另一个好处是,翻译者可以通过提供,例如,将占位符放置在适合目标语言使用的不同位置。 '!算什么'作为翻译字符串。通过上面的示例,这将导致:

    1. '1什么'
    2. '2什么'
    3. '3什么'
    4. 使用'%'会在占位符周围添加<em>标记以突出显示,'@'将通过check_plain()运行它以逃避标记。

答案 1 :(得分:0)

t()的第一个参数是一个文字字符串;函数调用t("Your favorite color is $color")不会将函数传递给文字字符串,并且提取要翻译的字符串的脚本将无法提取要翻译的字符串。实际上,提取脚本会提取"Your favorite color is $color"(注意变量未在字符串中替换),但这不是运行时传递给t()的字符串。