From c983148c358929fdbbd2dba5ba1acc1b6289be0b Mon Sep 17 00:00:00 2001 From: Will Date: Wed, 15 Oct 2014 00:45:29 -0400 Subject: [PATCH] Language Support for Views, Panels, and Context. --- metatag_context/metatag_context.admin.inc | 14 +++++++ metatag_context/metatag_context.context.inc | 4 +- metatag_panels/metatag_panels.module | 49 +++++++++++++++++++++- metatag_views/metatag_views.module | 19 ++++++++- ...atag_views_plugin_display_extender_metatags.inc | 12 ++++++ 5 files changed, 95 insertions(+), 3 deletions(-) diff --git a/metatag_context/metatag_context.admin.inc b/metatag_context/metatag_context.admin.inc index 2ca07ce..ed1190c 100644 --- a/metatag_context/metatag_context.admin.inc +++ b/metatag_context/metatag_context.admin.inc @@ -85,6 +85,13 @@ 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'] 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 +182,13 @@ 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'] 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 89e2844..5bf8ec9 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']); + } + } } /** @@ -148,8 +156,9 @@ 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) { @@ -176,3 +185,41 @@ function metatag_panels_page_build(&$page) { $page['content']['metatags']['global'] = $metatags; } } + +/** + * Implements hook_panels_delete_display(). + * + * Remove saved i18n translations of meta-tags. + * + * @param integer $did + * Id of the display to delete. + */ +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..681b7ef 100644 --- a/metatag_views/metatag_views.module +++ b/metatag_views/metatag_views.module @@ -69,6 +69,7 @@ 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 +87,32 @@ 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..f245e3a 100644 --- a/metatag_views/metatag_views_plugin_display_extender_metatags.inc +++ b/metatag_views/metatag_views_plugin_display_extender_metatags.inc @@ -66,6 +66,18 @@ 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']); + } + } } } -- 1.9.3 (Apple Git-50)