解决用 entity_translation 模块建立多语言网站,在 Views 无法翻译问题

来源:互联网 发布:c语言黑客代码大全 编辑:程序博客网 时间:2024/06/06 12:36

在用entrity_translation模块建立支持多语言网站时候,用Views的时候,不管怎么设置都无法显示中文(网站以英文为主,添加中文)

参考:https://www.drupal.org/node/1605406

需要修改下列文件 entity_translation.info

@@ -20,3 +20,4 @@ files[] = views/entity_translation_handler_field_label.inc files[] = views/entity_translation_handler_filter_entity_type.inc files[] = views/entity_translation_handler_filter_language.inc files[] = views/entity_translation_handler_filter_translation_exists.inc+files[] = views/entity_translation_handler_field_field.inc

在 entity_translation目录下找到 entity_translation.info

添加:views/entity_translation_handler_field_field.inc

----------------------------------------

打开 views\entity_translation.views.inc

@@ -224,4 +224,24 @@ function entity_translation_views_data_alter(&$data) {       );     }   }++  // Expose all translatable fields, using a handler based off Views' default+  // field handler, that allows users to select the language to display the+  // field in.+  foreach (field_info_fields() as $field) {+    if ($field['translatable'] && $field['storage']['type'] == 'field_sql_storage') {+      // Set defaults and just change the handler, title, group, and help.+      $defaults = field_views_field_default_views_data($field);+      foreach ($defaults as $table_name => $table_data) {+        if (isset($data[$table_name][$field['field_name']])) {+          $field_title = $table_data[$field['field_name']]['title'];+          $table_data[$field['field_name']]['title'] = t('!title: translated', array('!title' => $field_title));+          $table_data[$field['field_name']]['group'] = t('Entity translation');+          $table_data[$field['field_name']]['help'] .= ' ' . t('Show the field !title translated into a specified language', array('!title' => $field_title));+          $table_data[$field['field_name']]['field']['handler'] = 'entity_translation_handler_field_field';+          $data[$table_name][$field['field_name'] . '_et'] = $table_data[$field['field_name']];+        }+      }+    }+  } }

在最后添加 +后面的代码

------------------------------------------------

在views目录下,新建 entity_translation_handler_field_field.inc 文件

<?php/** * @file * This file contains a field handler for entity translation that shows field * content translated into a specified language. */class entity_translation_handler_field_field extends views_handler_field_field {  function option_definition() {    $options = parent::option_definition();    $options['language'] = array(      'default' => '***CURRENT_LANGUAGE***',    );    return $options;  }  function options_form(&$form, &$form_state) {    parent::options_form($form, $form_state);    $languages = array(      '***CURRENT_LANGUAGE***' => t("Current user's language"),      '***DEFAULT_LANGUAGE***' => t("Default site language"),      LANGUAGE_NONE => t('Language neutral'),    );    $languages = array_merge($languages, locale_language_list());    $form['language'] = array(      '#type' => 'select',      '#title' => t('Language'),      '#options' => $languages,      '#default_value' => $this->options['language'],      '#description' => t('Select the language to display this field in')    );  }  /**   * Overrides parent::field_language, retrieving the language from the handler   * options.   */  function field_language($entity_type, $entity) {    global $language_content;    if (field_is_translatable($entity_type, $this->field_info)) {      $default_language = language_default('language');      $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),                              array($language_content->language, $default_language),                              $this->options['language']);      // Give the Field Language API a chance to fallback to a different language      // (or LANGUAGE_NONE), in case the field has no data for the selected language.      // field_view_field() does this as well, but since the returned language code      // is used before calling it, the fallback needs to happen explicitly.      $language = field_language($entity_type, $entity, $this->field_info['field_name'], $language);      return $language;    }    else {      return LANGUAGE_NONE;    }  }}


---------------------------------------------------

做好以上修改后,在Views的Fields里会多一个选项 Entity translation: Title


0 0