【问题标题】:Drupal 6: how to make CCK default values translatable?Drupal 6:如何使 CCK 默认值可翻译?
【发布时间】:2011-01-31 18:26:11
【问题描述】:

在我的多语言 Drupal 6 网站中,我需要使我的 CCK 字段默认值可翻译,即

  • Hello - 英文版
  • Bonjour - 在法语中

我无法使用翻译表找到此文本,变量表中也没有这些值,因此我可以使用多语言变量。

你知道如何在不同的语言中设置不同的默认值吗?

【问题讨论】:

    标签: drupal drupal-6 internationalization


    【解决方案1】:

    定义CCK字段时,可以输入PHP代码sn-p覆盖该字段的默认值

    在此处输入以下内容:

    return array(0 => array('value' => t('Hello')));
    

    现在使用非英语版本的此 CCK 字段访问节点添加页面,以便将其添加到可翻译字符串中。

    现在您可以使用“翻译界面”菜单对其进行翻译(不过可能需要先访问您的 cck 类型的“创建”页面)。事实上,它不需要任何额外的模块,只需要基本的 D6(它可能也适用于 D5 和 D7)。

    【讨论】:

      【解决方案2】:

      这种方法有点小技巧。我不确定我会在没有真正考虑后果的情况下部署它。对于一个简单的用例,它可能没问题。

      创建一个自定义模块,比如说 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”。这让我们有机会在节点渲染之前对其进行操作。在我们做任何事情之前,我们会检查

      1. 这是正确的节点类型吗?
      2. 我们的 op = "load" 吗?
      3. 这个值是我们的默认值吗?

      然后我们要做的是通过 t() 函数传递现有的默认值。这将使默认字符串可用于 i18n 翻译表,然后您可以使用正常的翻译字符串的方式。

      *免责声明* 我自己还没有在生产中测试过。我不完全确定会产生什么影响。您可能想在实现它之前考虑一下,并且您可能想放入一些功能以从 DB 中查找默认值,以防它们在 CCK UI 中发生更改。

      希望这会有所帮助 - 或者可能会为您的问题提供一些解决方案!

      【讨论】:

        猜你喜欢
        • 2021-01-10
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 2012-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多