【发布时间】:2011-01-31 18:26:11
【问题描述】:
在我的多语言 Drupal 6 网站中,我需要使我的 CCK 字段默认值可翻译,即
-
Hello- 英文版 -
Bonjour- 在法语中
我无法使用翻译表找到此文本,变量表中也没有这些值,因此我可以使用多语言变量。
你知道如何在不同的语言中设置不同的默认值吗?
【问题讨论】:
标签: drupal drupal-6 internationalization
在我的多语言 Drupal 6 网站中,我需要使我的 CCK 字段默认值可翻译,即
Hello - 英文版Bonjour - 在法语中我无法使用翻译表找到此文本,变量表中也没有这些值,因此我可以使用多语言变量。
你知道如何在不同的语言中设置不同的默认值吗?
【问题讨论】:
标签: drupal drupal-6 internationalization
定义CCK字段时,可以输入PHP代码sn-p覆盖该字段的默认值。
在此处输入以下内容:
return array(0 => array('value' => t('Hello')));
现在使用非英语版本的此 CCK 字段访问节点添加页面,以便将其添加到可翻译字符串中。
现在您可以使用“翻译界面”菜单对其进行翻译(不过可能需要先访问您的 cck 类型的“创建”页面)。事实上,它不需要任何额外的模块,只需要基本的 D6(它可能也适用于 D5 和 D7)。
【讨论】:
这种方法有点小技巧。我不确定我会在没有真正考虑后果的情况下部署它。对于一个简单的用例,它可能没问题。
创建一个自定义模块,比如说 def_translate。在 def_translate.module 中添加一个函数
function def_translate_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if($node->type == "sometype"
&& $op == "load"
&& $node->field_some_cck_field_type[0]['value'] == "your default value")
{
$node->field_some_cck_field_type[0]['value'] =
t($node->field_some_cck_field_type[0]['value']);
}
}
好的,这是在做什么?
当一个节点被加载时,hook_nodeapi 被调用,$op 被设置为“load”。这让我们有机会在节点渲染之前对其进行操作。在我们做任何事情之前,我们会检查
然后我们要做的是通过 t() 函数传递现有的默认值。这将使默认字符串可用于 i18n 翻译表,然后您可以使用正常的翻译字符串的方式。
*免责声明* 我自己还没有在生产中测试过。我不完全确定会产生什么影响。您可能想在实现它之前考虑一下,并且您可能想放入一些功能以从 DB 中查找默认值,以防它们在 CCK UI 中发生更改。
希望这会有所帮助 - 或者可能会为您的问题提供一些解决方案!
【讨论】: