我正在阅读Pro Drupal Development, Second Edition。它说以下是必要的:
t("Your favorite color is !color", array('!color' => "$color"));
但它也说!占位符意味着不会对字符串进行任何转换。那么为什么不只是:
t("Your favorite color is $color");
谢谢。
t() 用于查找包含的字符串的翻译。如果您在该字符串中直接包含可变内容(示例中为 $color),则对于遇到但尚未翻译的任何新内容,翻译查找将失败。占位符允许翻译者只翻译字符串的固定部分,并且仍然允许注入可变内容。
修饰符 '!','%','@' 只是让您更好地控制插入的发生方式,使用 '! ' 意味着字符串将按原样插入。
最明显的例子是数字:
如果你有
t("Number $count");
你用不同的数字多次调用它,比如 1,2,3,每次 t() 都会为不同的字符串寻找不同的翻译:
而与
t('Number !count', array('!count' => $count);
它只会寻找一种翻译,将数字“原样”注入其中!
另一个好处是,翻译者可以将占位符放置在适合目标语言使用的不同位置,方法是提供例如“!count 不管什么”作为翻译字符串。对于上面的示例,这将导致:
使用 '%' 将用标记包围占位符以<em>
突出显示,'@' 将运行它check_plain()
以转义标记。
的第一个参数t()
是一个文字字符串;函数调用 ast("Your favorite color is $color")
不会将文字字符串传递给函数,并且提取要翻译的字符串的脚本将无法提取要翻译的字符串。实际上,提取脚本会提取"Your favorite color is $color"
(注意变量没有在字符串中被替换),但这不是在运行时将传递给的字符串t()
。