diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php
index 41600ac..6caba42 100644
--- a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php
+++ b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php
@@ -19,7 +19,7 @@ class EntityTranslationSettingsTest extends WebTestBase {
*
* @var array
*/
- public static $modules = array('language', 'translation_entity', 'comment');
+ public static $modules = array('language', 'translation_entity', 'comment', 'field_ui');
public static function getInfo() {
return array(
@@ -37,7 +37,7 @@ function setUp() {
$this->drupalCreateContentType(array('type' => 'article'));
$this->drupalCreateContentType(array('type' => 'page'));
- $admin_user = $this->drupalCreateUser(array('administer languages', 'administer entity translation'));
+ $admin_user = $this->drupalCreateUser(array('administer languages', 'administer entity translation', 'administer node fields'));
$this->drupalLogin($admin_user);
}
@@ -119,4 +119,43 @@ protected function assertSettings($entity_type, $bundle, $enabled, $edit) {
return $this->assertEqual(translation_entity_enabled($entity_type, $bundle), $enabled, $message);
}
+ /**
+ * Tests that field instance setting depends on bundle translatability.
+ */
+ function testFieldTranslatableSettingsUI() {
+
+ // At least one field needs to be translatable to enable article for
+ // translation. Create an extra field to be used for this purpose.
+ $field = array(
+ 'field_name' => 'article_text',
+ 'type' => 'text',
+ );
+ field_create_field($field);
+ $instance = array(
+ 'field_name' => 'article_text',
+ 'entity_type' => 'node',
+ 'bundle' => 'article',
+ );
+ field_create_instance($instance);
+
+ // Tests that field instance doesn't have translatable setting if bundle
+ // is not translatable.
+ $path = 'admin/structure/types/manage/article/fields/body/field-settings';
+ $this->drupalGet($path);
+ $this->assertNoText('Enable translation', 'No translatable setting for field.');
+
+ // Tests that field instance has translatable setting if bundle is
+ // translatable. Note: this field instance is not translatable when
+ // enable bundle translatability.
+ $edit = array(
+ 'entity_types[node]' => TRUE,
+ 'settings[node][article][settings][language][language_show]' => TRUE,
+ 'settings[node][article][translatable]' => TRUE,
+ 'settings[node][article][fields][article_text]' => TRUE,
+ );
+ $this->assertSettings('node', 'article', TRUE, $edit);
+ $this->drupalGet($path);
+ $this->assertText('Enable translation', 'Translatable setting is available for field.');
+ }
+
}
diff --git a/core/modules/translation_entity/translation_entity.module b/core/modules/translation_entity/translation_entity.module
index 0167180..d38dbb2 100644
--- a/core/modules/translation_entity/translation_entity.module
+++ b/core/modules/translation_entity/translation_entity.module
@@ -735,34 +735,41 @@ function translation_entity_field_extra_fields() {
*/
function translation_entity_form_field_ui_field_settings_form_alter(array &$form, array &$form_state, $form_id) {
$field = $form['#field'];
+ $entity_type = $form['#entity_type'];
+ $bundle = $form['#bundle'];
$field_name = $field['field_name'];
+
+ $bundle_is_translatable = translation_entity_enabled($entity_type, $bundle);
+ $field_has_data = field_has_data($field);
$translatable = $field['translatable'];
- $label = t('Field translation');
-
- if (field_has_data($field)) {
- $form['field']['translatable'] = array(
- '#type' => 'item',
- '#title' => $label,
- '#attributes' => array('class' => 'translatable'),
- 'link' => array(
- '#type' => 'link',
- '#prefix' => t('This field has data in existing content.') . ' ',
- '#title' => !$translatable ? t('Enable translation') : t('Disable translation'),
- '#href' => 'admin/config/regional/translation_entity/translatable/' . $field_name,
- '#options' => array('query' => drupal_get_destination()),
- '#access' => user_access('administer entity translation'),
- ),
- );
- }
- else {
- $form['field']['translatable'] = array(
- '#type' => 'checkbox',
- '#title' => t('Users may translate this field.'),
- '#default_value' => $translatable,
- );
- }
- $form['field']['translatable']['#weight'] = 20;
+ $form['field']['translatable'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Translatable'),
+ '#default_value' => $translatable,
+ '#disabled' => $field_has_data || !$bundle_is_translatable,
+ '#weight' => 20,
+ );
+ // Provide helpful pointers for administrators.
+ if (user_access('administer entity translation')) {
+ if (field_has_data($field)) {
+ $toggle_url = url('admin/config/regional/translation_entity/translatable/' . $field_name, array(
+ 'query' => drupal_get_destination(),
+ ));
+ $form['field']['translatable']['#description'] = t('This field has data in existing content. @toggle-label.', array(
+ '@toggle-translatable-url' => $toggle_url,
+ '@toggle-label' => !$translatable ? t('Associate all field values with a language') : t('Remove language association from all field values'),
+ ));
+ }
+ elseif (!$bundle_is_translatable) {
+ $toggle_url = url('admin/config/regional/content-language', array(
+ 'query' => drupal_get_destination(),
+ ));
+ $form['field']['translatable']['#description'] = t('To enable translation of this field, enable language support for this type.', array(
+ '@language-settings-url' => $toggle_url,
+ ));
+ }
+ }
}
/**