Drupal的t()函数可以本地化英语同音异义词吗?

ctf*_*ord 4 localization drupal

在Drupal中,向用户显示的字符串应该通过t()函数传递,如下所示:

$heading = "<h2>" . t("Product") . "</h2>";
Run Code Online (Sandbox Code Playgroud)

这允许Drupal将字符串翻译成适当的语言.

但是,如果在同一网站上以两种不同的方式使用相同的英语单词,该怎么办?如果我写了一个价格计算模块,其中有一个"产品"选项,表明应该将折扣相乘,那么本地化过程如何知道是否将该单词翻译为要购买的项目或算术运算?

我应该完全避免使用同音异义词吗?

mac*_*mac 5

非常好的问题(+1).我相信,2006年有一个关于Drupal邮件列表的讨论.核心开发人员对i18n和l10n基础设施的当前设计进行了激烈的辩护.Indoeuropean语言同音异义的问题是有限的,但是当你移居到中国时,由于每个中文表意文字代表了一堆非常不同的概念,因此变得势不可挡,你只能通过观察上下文得到预期的概念.

虽然没有同音异义词的编码解决方案,但有一个非常简单的最佳实践:提供上下文!只要有可能,就用句子提供t()函数,而不是单个单词,或者用以下代码文档说出来common.inc:

使用t()时,尝试将整个句子和字符串放在一个t()调用中.这使翻译人员更容易,因为它提供了每个单词所指的内容.

如果无法做到这一点,并且使用不同拼写的同义词不是一个选项,您可以嵌入透明的HTML标记,为翻译提供上下文.例如:

$heading = "<h2>" . t("<span id="product-as-in-stores">Product</span>") . "</h2>";
Run Code Online (Sandbox Code Playgroud)

这样您就可以为翻译人员提供必要的信息,而如果您只是嵌入了<h2>标签,则翻译人员必须猜测产品所指的是什么.

这是 - BTW - 在t()字符串中嵌入HTML标记的极少数情况之一被认为是不好的.

HTH!