在我的多语言Drupal 6网站中,我需要使我的CCK字段默认值可翻译,即
Hello -在英语versionBonjour中-在法语one中
我在翻译表中找不到这个文本,这些值也不在可变表中,所以我可以使用多语言变量。
你知道如何在不同的语言中有不同的默认值吗?
发布于 2011-01-27 09:36:08
定义CCK字段时,您可以输入一个代码片段,以覆盖字段的默认值。
在那里输入以下内容:
return array(0 => array('value' => t('Hello')));现在,从一个非英语版本的中访问具有此CCK字段的节点添加页,以便将其添加到可翻译的字符串中。
现在您可以使用"Translate“菜单来翻译它了(不过,它可能首先访问cck类型的"create”页面)。实际上,它不需要任何额外的模块,只需要基本的D6 (而且它可能也适用于D5和D7 )。
发布于 2011-01-26 18:35:06
这种方法有点麻烦。我不确定我是否会在没有真正考虑后果的情况下进行部署。对于一个简单的用法来说,这可能是可以的。
创建一个自定义模块,比如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翻译表可以使用默认字符串,然后可以使用正常的字符串转换方式。
*DISCLAIMER* --我自己还没有在生产中测试过。我不完全确定效果会是什么。在实现之前,您可能需要仔细考虑这一点,并且您可能希望在CCK UI中添加一些特性来查找DB中的默认值,以防它们被更改。
希望这能帮上忙--或者可能动摇一下你的问题的解决方案!
https://stackoverflow.com/questions/4802672
复制相似问题