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

Nic*_*ner 3 drupal drupal-6

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

t("Your favorite color is !color", array('!color' => "$color"));
Run Code Online (Sandbox Code Playgroud)

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

t("Your favorite color is $color");
Run Code Online (Sandbox Code Playgroud)

谢谢.

Hen*_*pel 12

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

修饰符"!","%","@"只是给你了一些更多的控制如何插入发生,以"!" 意味着字符串将按原样插入.

最明显的例子是数字:

如果你有

t("Number $count");
Run Code Online (Sandbox Code Playgroud)

并且你用不同的数字多次调用它,例如1,2,3,每次t()为不同的字符串寻找不同的翻译:

  1. t('1号')
  2. t('2号')
  3. t('3号')

而与

t('Number !count', array('!count' => $count);
Run Code Online (Sandbox Code Playgroud)

它只会寻找一个翻译,将数字"原样"注入其中!

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

  1. '1什么'
  2. '2什么'
  3. '3什么'

使用'%'会在占位符周围添加<em>标记以突出显示,'@'将运行它check_plain()来转义标记.