diff --git a/metatag_context/metatag_context.admin.inc b/metatag_context/metatag_context.admin.inc index 2ca07ce..026930c 100644 --- a/metatag_context/metatag_context.admin.inc +++ b/metatag_context/metatag_context.admin.inc @@ -85,6 +85,15 @@ function metatag_context_config_add_form_submit($form, &$form_state) { $context = metatag_context_load_default_context(); $context->name = $form_state['values']['name']; context_save($context); + + // Update the i18n string. + if (function_exists('i18n_string_update')) { + foreach ($context->reactions['metatag_context_reaction']['metatags'][LANGUAGE_NONE] as $field => $item) { + $name = "metatag:context:" . $context->name . ":" . $field; + i18n_string_update($name, $item['value']); + } + } + $form_state['redirect'] = 'admin/config/search/metatags/context/' . $context->name; } @@ -175,6 +184,15 @@ function metatag_context_config_edit_form_submit($form, &$form_state) { $paths = array_combine($paths, $paths); $context->conditions['path']['values'] = $paths; context_save($context); + + // Update the i18n string. + if (function_exists('i18n_string_update')) { + foreach ($context->reactions['metatag_context_reaction']['metatags'][LANGUAGE_NONE] as $field => $item) { + $name = "metatag:context:" . $context->name . ":" . $field; + i18n_string_update($name, $item['value']); + } + } + $form_state['redirect'] = 'admin/config/search/metatags/context'; } diff --git a/metatag_context/metatag_context.context.inc b/metatag_context/metatag_context.context.inc index 9a0822f..2186ff5 100644 --- a/metatag_context/metatag_context.context.inc +++ b/metatag_context/metatag_context.context.inc @@ -114,7 +114,9 @@ class metatag_context_reaction extends context_reaction { } foreach ($metadata_array as $key => $data) { if (!empty($data['value'])) { - $metatags[$key] = $data;//t(check_plain($data['value'])); + $name = 'metatag:context:' . $context->name . ':' . $key; + $data['value'] = metatag_translate($name, $data['value']); + $metatags[$key] = $data; } } diff --git a/metatag_panels/metatag_panels.module b/metatag_panels/metatag_panels.module index 88950ec..4e05ab2 100644 --- a/metatag_panels/metatag_panels.module +++ b/metatag_panels/metatag_panels.module @@ -90,6 +90,14 @@ function metatag_panels_form_submit($form, $form_state) { ); $form_state['handler']->conf['metatag_panels'] = $conf; + if ($conf['enabled'] && function_exists('i18n_string_update')) { + $handler = $form_state['handler']; + $instance = 'panels:' . $handler->task . ':' . $handler->subtask . ':' . $handler->name; + foreach ($conf['metatags'] as $field => $item) { + $name = "metatag:" . $instance . ":" . $field; + i18n_string_update($name, $item['value']); + } + } } /** @@ -147,19 +155,21 @@ function metatag_panels_ctools_render_alter($info, $page, $context) { } // Build the Metatag. + $instance = 'panels:' . $handler->task . ':' . $handler->subtask . ':' . $handler->name; $options = array( - 'instance' => 'panels:' . $handler->name, + 'instance' => $instance, 'token data' => $tokens, ); foreach ($metatags as $metatag => $data) { $metatag_instance = metatag_get_instance($metatag, $data); - if ($metatag_instance) { + if (!empty($metatag_instance)) { $output[$metatag] = $metatag_instance->getElement($options); } } - // Give third-parties the opportunity to alter the metatag for a given instance. + // Give third-parties the opportunity to alter the metatag for a given + // instance. drupal_alter('metatag_metatags_view', $output, $options['instance']); } @@ -175,3 +185,39 @@ function metatag_panels_page_build(&$page) { $page['content']['metatags']['global'] = $metatags; } } + +/** + * Implements hook_panels_delete_display(). + * + * Remove saved i18n translations of meta tags. + */ +function metatag_panels_panels_delete_display($did) { + if (function_exists('i18n_string_remove')) { + // We need the task, sub-task, handler names to create the metatag + // instance, and conf to get the actual meta-tags. + $info = db_select('page_manager_handlers') + ->fields('page_manager_handlers', array('did', 'name', 'task', 'subtask', 'handler', 'conf')) + ->condition('did', $did) + ->execute() + ->fetchAssoc(); + + if (!empty($info)) { + $conf = unserialize($info['conf']); + if (!empty($conf['metatag_panels']['metatags'])) { + $task = $info['task']; + $sub_task = $info['subtask']; + $handler_name = $info['name']; + + // Construct the instance. + $conf = $conf['metatag_panels']; + $instance = 'panels:' . $task . ':' . $sub_task . ':' . $handler_name; + + // For each metatag, remove the i18n string. + foreach ($conf['metatags'] as $field => $item) { + $name = "metatag:" . $instance . ":" . $field; + i18n_string_remove($name, $item['value']); + } + } + } + } +} diff --git a/metatag_views/metatag_views.module b/metatag_views/metatag_views.module index bb59583..b7916a9 100644 --- a/metatag_views/metatag_views.module +++ b/metatag_views/metatag_views.module @@ -69,6 +69,8 @@ function metatag_views_page_alter(&$page) { // Check if Views metatags are enabled. if (!empty($view) && metatag_config_is_enabled('view')) { + global $language; + // The following is taken from views_get_page_view(). // If a module is still putting in the display like we used to, catch that. if (is_subclass_of($view, 'views_plugin_display')) { @@ -86,16 +88,33 @@ function metatag_views_page_alter(&$page) { $metatags = array(); } + // Include only view name by default. + $instance = 'view:' . $view->name; + + // Include display name if option is overridden. + if (!$view->display_handler->is_defaulted('metatags')) { + $instance = 'view:' . $view->name . ':' . $view->current_display; + } + // If meta tags were found but they're not nested for the language, fix it. // This leaves some possibility for future versions to support translation. if (!empty($metatags) && !isset($metatags[LANGUAGE_NONE])) { $metatags = array(LANGUAGE_NONE => $metatags); + $translated_metatags = array(); + $saved_metatags = $view->display_handler->get_option('metatags'); + foreach ($saved_metatags as $field => $value) { + $name = "metatag:" . $instance . ":" . $field; + $translated_metatags[$field] = array( + 'value' => i18n_string_translate($name, $value['value']), + ); + } + $metatags[$language->language] = $translated_metatags; } // Build options for meta tag rendering. - $instance = 'view:' . $view->name; $options = array(); $options['token data']['view'] = $view; + $options['language'] = $language->language; // Add the metatags. $page['content']['metatags'][$instance] = metatag_metatags_view($instance, $metatags, $options); diff --git a/metatag_views/metatag_views_plugin_display_extender_metatags.inc b/metatag_views/metatag_views_plugin_display_extender_metatags.inc index 4a5d96d..e5f0c1a 100644 --- a/metatag_views/metatag_views_plugin_display_extender_metatags.inc +++ b/metatag_views/metatag_views_plugin_display_extender_metatags.inc @@ -66,6 +66,21 @@ class metatag_views_plugin_display_extender_metatags extends views_plugin_displa } $this->display->set_option('metatags', $metatags); + + if ($this->definition['enabled'] && function_exists('i18n_string_update')) { + // Include only view name by default. + $instance = 'view:' . $this->view->name; + + // Include display name if option is overridden. + if (!$this->display->is_defaulted('metatags')) { + $instance = 'view:' . $this->view->name . ':' . $this->view->current_display; + } + + foreach ($metatags as $field => $item) { + $name = "metatag:" . $instance . ":" . $field; + i18n_string_update($name, $item['value']); + } + } } }