diff --git a/field_collection.module b/field_collection.module index 30f175e..c31a70e 100644 --- a/field_collection.module +++ b/field_collection.module @@ -140,20 +140,34 @@ class FieldCollectionItemEntity extends Entity { } /** + * Returns the field instance label translated to interface language. + */ + public function translatedInstanceLabel($langcode = NULL) { + if ($info = $this->instanceInfo()) { + if (module_exists('i18n_field')) { + return i18n_string("field:{$this->field_name}:{$info['bundle']}:label", $info['label'], array('langcode' => $langcode)); + } + return $info['label']; + } + } + + /** * Specifies the default label, which is picked up by label() by default. */ public function defaultLabel() { // @todo make configurable. - if ($instance = $this->instanceInfo()) { + if ($this->fetchHostDetails()) { $field = $this->fieldInfo(); + $label = $this->translatedInstanceLabel(); + if ($field['cardinality'] == 1) { - return $instance['label']; + return $label; } elseif ($this->item_id) { - return t('!instance_label @count', array('!instance_label' => $instance['label'], '@count' => $this->delta() + 1)); + return t('!instance_label @count', array('!instance_label' => $label, '@count' => $this->delta() + 1)); } else { - return t('New !instance_label', array('!instance_label' => $instance['label'])); + return t('New !instance_label', array('!instance_label' => $label)); } } return t('Unconnected field collection item'); @@ -728,7 +742,7 @@ function field_collection_field_formatter_settings_form($field, $instance, $view $settings = $display['settings']; $elements = array(); - if ($display['type'] !== 'field_collection_fields') { + if ($display['type'] != 'field_collection_fields') { $elements['edit'] = array( '#type' => 'textfield', '#title' => t('Edit link title'), @@ -820,7 +834,8 @@ function field_collection_field_formatter_view($entity_type, $entity, $field, $i $links = array(); foreach (array('edit', 'delete') as $op) { if ($settings[$op] && field_collection_item_access($op == 'edit' ? 'update' : $op, $field_collection)) { - $links[] = l($settings[$op], $field_collection->path() . '/' . $op, array('query' => drupal_get_destination())); + $title = entity_i18n_string("field:{$field['field_name']}:{$instance['bundle']}:setting_$op", $settings[$op]); + $links[] = l($title, $field_collection->path() . '/' . $op, array('query' => drupal_get_destination())); } } if ($links) { @@ -851,7 +866,7 @@ function field_collection_field_formatter_view($entity_type, $entity, $field, $i foreach (array('edit', 'delete') as $op) { if ($settings[$op] && field_collection_item_access($op == 'edit' ? 'update' : $op, $field_collection)) { $links['#links'][$op] = array( - 'title' => $settings[$op], + 'title' => entity_i18n_string("field:{$field['field_name']}:{$instance['bundle']}:setting_$op", $settings[$op]), 'href' => $field_collection->path() . '/' . $op, 'query' => drupal_get_destination(), ); @@ -887,6 +902,7 @@ function field_collection_field_formatter_links(&$element, $entity_type, $entity // Check whether the current is allowed to create a new item. $field_collection_item = entity_create('field_collection_item', array('field_name' => $field['field_name'])); $field_collection_item->setHostEntity($entity_type, $entity, LANGUAGE_NONE, FALSE); + if (field_collection_item_access('create', $field_collection_item)) { $path = field_collection_field_get_path($field); list($id) = entity_extract_ids($entity_type, $entity); @@ -894,8 +910,11 @@ function field_collection_field_formatter_links(&$element, $entity_type, $entity if (!empty($settings['description'])) { $element['#suffix'] .= '
' . field_filter_xss($instance['description']) . '
'; } + $title = entity_i18n_string("field:{$field['field_name']}:{$instance['bundle']}:setting_add", $settings['add']); $add_path = $path . '/add/' . $entity_type . '/' . $id; - $element['#suffix'] .= '"; + $element['#suffix'] .= ''; } } // If there is no add link, add a special class to the last item. @@ -1299,6 +1318,35 @@ function field_collection_field_delete_field($field) { } /** + * Implements hook_i18n_string_list_{textgroup}_alter(). + */ +function field_collection_i18n_string_list_field_alter(&$properties, $type, $instance) { + if ($type == 'field_instance') { + $field = field_info_field($instance['field_name']); + + if ($field['type'] == 'field_collection') { + foreach ($instance['display'] as $view_mode => $display) { + + if ($display['type'] != 'field_collection_fields') { + $properties['field'][$instance['field_name']][$instance['bundle']]['setting_edit'] = array( + 'title' => t('Edit link title'), + 'string' => $display['settings']['edit'], + ); + $properties['field'][$instance['field_name']][$instance['bundle']]['setting_delete'] = array( + 'title' => t('Delete link title'), + 'string' => $display['settings']['delete'], + ); + $properties['field'][$instance['field_name']][$instance['bundle']]['setting_add'] = array( + 'title' => t('Add link title'), + 'string' => $display['settings']['add'], + ); + } + } + } + } +} + +/** * Implements hook_views_api(). */ function field_collection_views_api() { diff --git a/field_collection.pages.inc b/field_collection.pages.inc index 52c1f48..732e101 100644 --- a/field_collection.pages.inc +++ b/field_collection.pages.inc @@ -120,9 +120,6 @@ function field_collection_item_add($field_name, $entity_type, $entity_id, $revis return ''; } - $title = ($field['cardinality'] == 1) ? $instance['label'] : t('Add new !instance_label', array('!instance_label' => drupal_strtolower($instance['label']))); - drupal_set_title($title); - $field_collection_item = entity_create('field_collection_item', array('field_name' => $field_name)); // Do not link the field collection item with the host entity at this point, // as during the form-workflow we have multiple field collection item entity @@ -130,6 +127,9 @@ function field_collection_item_add($field_name, $entity_type, $entity_id, $revis // That way the link is going to be created when the item is saved. $field_collection_item->setHostEntity($entity_type, $entity, LANGUAGE_NONE, FALSE); + $title = ($field['cardinality'] == 1) ? $instance['label'] : t('Add new !instance_label', array('!instance_label' => $field_collection_item->translatedInstanceLabel())); + drupal_set_title($title); + // Make sure the current user has access to create a field collection item. if (!field_collection_item_access('create', $field_collection_item)) { return MENU_ACCESS_DENIED;