3

我正在阅读Pro Drupal Development, Second Edition。它说以下是必要的:

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

但它也说!占位符意味着不会对字符串进行任何转换。那么为什么不只是:

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

谢谢。

4

2 回答 2

12

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

修饰符 '!','%','@' 只是让您更好地控制插入的发生方式,使用 '! ' 意味着字符串将按原样插入。

最明显的例子是数字:

如果你有

t("Number $count");

你用不同的数字多次调用它,比如 1,2,3,每次 t() 都会为不同的字符串寻找不同翻译

  1. t('数字 1')
  2. t('数字 2')
  3. t('数字 3')

而与

t('Number !count', array('!count' => $count);

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

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

  1. '1随便'
  2. '2随便'
  3. '3随便'

使用 '%' 将用标记包围占位符以<em>突出显示,'@' 将运行它check_plain()以转义标记。

于 2009-08-23T16:56:37.427 回答
0

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

于 2009-12-16T21:14:25.043 回答