我正在阅读Pro Drupal Development,第二版。它说以下是必要的:
t("Your favorite color is !color", array('!color' => "$color"));
但它也说!占位符意味着不会对字符串进行任何转换。那么为什么不只是:
t("Your favorite color is $color");
谢谢。
最佳答案
t() 用于查找所包含字符串的翻译。如果该字符串中直接有可变内容(示例中为 $color),则对于遇到且尚未翻译的任何新内容,翻译查找将失败。占位符允许翻译器仅翻译字符串的固定部分,并且仍然允许注入(inject)可变内容。
修饰符“!”、“%”、“@”只是让您更好地控制如何插入,而“!”意味着字符串将按原样插入。
最明显的例子是数字:
如果你有
t("Number $count");
并且您使用不同的数字(例如 1,2,3)多次调用它,每次 t() 都会为不同的字符串查找不同的翻译:
- t('数字 1')
- t('数字 2')
- t('数字 3')
而与
t('Number !count', array('!count' => $count);
它只会查找一个翻译,将数字“按原样”注入(inject)其中!
另一个好处是,翻译者可以通过提供以下内容将占位符放置在适合目标语言用法的不同位置: '!countwhatever' 作为翻译字符串。对于上面的示例,这将导致:
- “1 随便”
- “2 随便”
- “3 随便”
使用“%”会将占位符括起来 <em>
用于突出显示的标签,“@”将贯穿 check_plain()
逃避标记。
关于Drupal 6 : Why use ! t() 中的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318946/