diff --git a/entity_translation.module b/entity_translation.module index bb337d7..397e98b 100644 --- a/entity_translation.module +++ b/entity_translation.module @@ -2016,3 +1984,46 @@ function path_entity_translation_delete($entity_type, $entity, $langcode) { $handler = entity_translation_get_handler($entity_type, $entity); path_delete(array('source' => $handler->getViewPath(), 'language' => $langcode)); } + +/** + * Ensure autocomplete taxonomy terms are created in the language of the parent + * entity. + */ +function entity_translation_field_widget_form_alter(&$element, &$form_state, $context) { + if ($context['instance']['widget']['type'] == 'taxonomy_autocomplete') { + $element['#element_validate'][] = 'entity_translation_taxonomy_autocomplete_validate'; + } +} + +/** + * Add the parent entity language to autocomplete taxonomy terms before they are + * created. + */ +function entity_translation_taxonomy_autocomplete_validate($element, &$form_state) { + $field_name = $element['#field_name']; + if (!empty($form_state['values']['language'])) { + // This is the language of the parent entity, that we will be appling to + // terms. + $language = $form_state['values']['language']; + // Fetch the field values, this also works for nested values, such as field + // collections. + $value = drupal_array_get_nested_value($form_state['values'], $element['#parents']); + foreach ($value as $delta => $term) { + if ($term['tid'] = 'autocreate') { + // Using the "autocreate" term created by taxonomy module, we create a + // temporary object and initiate the original translation in the parent + // entity language. + $term = (object)$term; + $handler = entity_translation_get_handler('taxonomy_term', $term); + $handler->setOriginalLanguage($language); + $handler->initTranslations(); + // Apply the language and translation structures to the original + // "autocreate" term element. + $value[$delta]['language'] = $language; + $value[$delta]['translations'] = $term->translations; + } + } + // Update form values. + form_set_value($element, $value, $form_state); + } +}