Skip to content

Commit

Permalink
Merge branch 'release/2.0.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
rhukster committed Jul 25, 2022
2 parents 7f43796 + edcd7c2 commit 8f36102
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 3 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# v2.0.0
## 07/25/2022

1. [](#new)
* Support for translated slugs!!!! [#50](https://github.com/getgrav/grav-plugin-langswitcher/pull/50)
* Require Grav `1.7`
1. [](#improved)
* Improved support for home URL [#59](https://github.com/getgrav/grav-plugin-langswitcher/pull/59)

# v1.5.0
## 07/01/2021

Expand Down
4 changes: 2 additions & 2 deletions blueprints.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: LangSwitcher
version: 1.5.0
version: 2.0.0
description: LangSwitcher is a [Grav](http://github.com/getgrav/grav) plugin that provides native language text links to switch between [multiple languages](http://learn.getgrav.org/content/multi-language) in Grav **v0.9.30** or greater.
icon: globe
author:
Expand All @@ -11,7 +11,7 @@ keywords: mulitlang, multilanguage, translation, switcher
bugs: https://github.com/getgrav/grav-plugin-langswitcher/issues
license: MIT
dependencies:
- { name: grav, version: '>=1.6.0' }
- { name: grav, version: '>=1.7.0' }

form:
validation: strict
Expand Down
48 changes: 48 additions & 0 deletions langswitcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,46 @@ public function onTwigTemplatePaths()
$this->grav['twig']->twig_paths[] = __DIR__ . '/templates';
}

/**
* Generate localized route based on the translated slugs found through the pages hierarchy
*/
protected function _getTranslatedUrl($lang, $path)
{
$translated_url_parts = array();
$pages = $this->grav['pages'];
$page = $pages->get($path);
$current_node = $page;
$max_recursions = 10;
while ($max_recursions > 0 && $current_node->slug() != 'pages' && $path != 'pages') {
$translated_md_filepath = "{$path}/{$current_node->template()}.{$lang}.md";
if (file_exists($translated_md_filepath)) {
//$this->grav['language']->setActive($lang);
$translated_page = new Page();
$translated_page->init(new \SplFileInfo($translated_md_filepath));
//$translated_page->filePath($translated_md_filepath);
$translated_slug = $translated_page->slug();
if (!empty($translated_slug)) {
array_unshift($translated_url_parts, $translated_slug);
} else {
$untranslated_slug = $current_node->slug();
if (!empty($untranslated_slug)) {
array_unshift($translated_url_parts, $untranslated_slug);
}
}
$current_node = $current_node->parent();
$path = dirname($path);
}
$max_recursions--;
}
if (!empty($translated_url_parts)) {
//array_unshift($translated_url_parts, $lang);
array_unshift($translated_url_parts, '');
return implode('/', $translated_url_parts);
} else {
return '';
}
}

/**
* Set needed variables to display Langswitcher.
*/
Expand Down Expand Up @@ -98,6 +138,14 @@ public function onTwigSiteVariables()
$data->translated_pages = $translated_pages;
}

$data->translated_routes = array();
foreach ($data->languages as $language) {
$data->translated_routes[$language] = $this->_getTranslatedUrl($language, $page->path());
if (empty($data->translated_routes[$language])) {
$data->translated_routes[$language] = $data->page_route;
}
}

$data->current = $this->grav['language']->getLanguage();

$this->grav['twig']->twig_vars['langswitcher'] = $this->grav['langswitcher'] = $data;
Expand Down
2 changes: 1 addition & 1 deletion templates/partials/langswitcher.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
{% set active_class = ' active' %}
{% else %}
{% set base_lang_url = base_url_simple ~ grav.language.getLanguageURLPrefix(language) %}
{% set lang_url = base_lang_url ~ langswitcher.page_route ~ page.urlExtension %}
{% set lang_url = base_lang_url ~ langswitcher.translated_routes[language] ~ page.urlExtension %}
{% set untranslated_pages_behavior = grav.config.plugins.langswitcher.untranslated_pages_behavior %}
{% if untranslated_pages_behavior != 'none' %}
{% set translated_page = langswitcher.translated_pages[language] %}
Expand Down

0 comments on commit 8f36102

Please sign in to comment.