Displays a link to switch the language.
Only if the content has been translated already.
This commit is contained in:
parent
a6ed2a3e5a
commit
55c322eb79
1 changed files with 52 additions and 1 deletions
|
@ -1,6 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use \Drupal\block\Entity\Block;
|
use Drupal\block\Entity\Block;
|
||||||
|
use Drupal\Core\Entity\EntityInterface;
|
||||||
|
use Drupal\Core\Url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements hook_preprocess_region__footer().
|
* Implements hook_preprocess_region__footer().
|
||||||
|
@ -11,4 +13,53 @@ function agarica_preprocess_region__footer(&$variables) {
|
||||||
->getViewBuilder('block')
|
->getViewBuilder('block')
|
||||||
->view($block);
|
->view($block);
|
||||||
$variables['language_switcher'] = $block_content;
|
$variables['language_switcher'] = $block_content;
|
||||||
|
$variables['language_switcher_link'] = agarica_languague_switch_link();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a link to switch to another language.
|
||||||
|
*/
|
||||||
|
function agarica_languague_switch_link() {
|
||||||
|
$derivative_id = 'language_interface';
|
||||||
|
$route = \Drupal::getContainer()->get('path.matcher')->isFrontPage() ? '<front>' : '<current>';
|
||||||
|
$current_language = \Drupal::languageManager()->getCurrentLanguage($derivative_id)->getId();
|
||||||
|
$links = \Drupal::languageManager()->getLanguageSwitchLinks($derivative_id, Url::fromRoute($route))->links;
|
||||||
|
$links['en']['title'] = 'Browser this page on English.';
|
||||||
|
$links['es']['title'] = 'Consulta esta pagina en Español';
|
||||||
|
$lid = ($current_language == 'en') ? 'es' : 'en';
|
||||||
|
// Remove current language from the links
|
||||||
|
unset($links[$current_language]);
|
||||||
|
|
||||||
|
// Check if the current path display an entity.
|
||||||
|
$entity = FALSE;
|
||||||
|
foreach (\Drupal::routeMatch()->getParameters() as $param) {
|
||||||
|
if ($param instanceof EntityInterface) {
|
||||||
|
$entity[] = $param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove links if the content hasnt' been translated yet.
|
||||||
|
if ($entity) {
|
||||||
|
$has_translation = (method_exists($entity[0], 'getTranslationStatus')) ? $entity[0]->getTranslationStatus($lid) : FALSE;
|
||||||
|
$this_translation = ($has_translation && method_exists($entity[0], 'getTranslation')) ? $entity[0]->getTranslation($lid) : FALSE;
|
||||||
|
$access_translation = ($this_translation && method_exists($this_translation, 'access') && $this_translation->access('view')) ? TRUE : FALSE;
|
||||||
|
if (!$this_translation || !$access_translation || $current_language == $lid) {
|
||||||
|
unset($links[$lid]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$links_render_array = [];
|
||||||
|
// Transform the links to arrays that can be renderer.
|
||||||
|
foreach ($links as $language => $link) {
|
||||||
|
$links_render_array[] = [
|
||||||
|
'#type' => 'link',
|
||||||
|
'#url' => $link['url'],
|
||||||
|
'#title' => $link['title'],
|
||||||
|
'#options' => [
|
||||||
|
'language' => $link['language'],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $links_render_array;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue