diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1785d5f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,50 @@ +# v1.4.0 +## 06/29/2017 + +1. [](#new) + * Added the `untranslated_pages_behavior` option to determine what to do with a language link when the current page doesn't exist in that language or it exists but it's not published +1. [](#bugfix) + * Fixed generated URLs when `append_url_extension` is set, via PR [#22](https://github.com/getgrav/grav-plugin-langswitcher/pull/22) + +# v1.3.0 +## 02/17/2017 + +1. [](#new) + * Added support for `hreflang` annotations via PR [#19](https://github.com/getgrav/grav-plugin-langswitcher/pull/19) + +# v1.2.1 +## 05/28/2016 + +1. [](#bugfix) + * Display all language names, even those with non supported locales + +# v1.2.0 +## 05/03/2016 + +1. [](#improved) + * Take URI parameters into account when switching languages + * Add `external` class to avoid problems on modular pages when `jquery.singlePageNav` is loaded + +# v1.1.0 +## 10/15/2015 + +1. [](#improved) + * Added active class to language links + +# v1.0.2 +## 07/13/2015 + +1. [](#improved) + * Improved homepage routing + +# v1.0.1 +## 07/08/2015 + +1. [](#improved) + * Updated blueprints with some typo fixes + +# v1.0.0 +## 07/08/2015 + +1. [](#new) + * ChangeLog started... diff --git a/LICENSE b/LICENSE index 8864d4a..b5be971 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ -MIT License +The MIT License (MIT) -Copyright (c) 2017 +Copyright (c) 2017 Clemdesign (http://www.clemdesign.fr) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md new file mode 100644 index 0000000..74d01fd --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# Grav Language Selector Plugin + +![Language Selector](assets/readme_1.jpg) + +`Language Selector` is a [Grav](http://github.com/getgrav/grav) plugin that provides native language selector with flags to switch between [Multiple Languages](http://learn.getgrav.org/content/multi-language). + +# Installation + +Installing the Language Selector plugin can be done only manually for this moment. GPM installation is not yet available + +## Manual Installation + +To install this plugin, just download the zip version of this repository and unzip it under `user/plugins`. Then, rename the folder to `language-selector`. You can find these files either on [GitHub](https://github.com/clemdesign/grav-plugin-language-selector). + +You should now have all the plugin files under + + /yoursite/user/plugins/language-selector + +Other way is to use `GIT`. In `user/plugins` folder, apply the following command: +``` +git clone https://github.com/clemdesign/grav-plugin-language-selector language-selector +``` + +This will clone this repository into the _language-selector_ folder. + +# Usage + +The `Language Selector` plugin doesn't require any configuration. You do however need to add the included Twig partials template into your own theme somewhere you want the available languages to be displayed. + +``` +{% include 'partials/language-selector.html.twig' %} +``` + +Something you might want to do is to override the look and feel of the langswitcher, and with Grav it is super easy. + +Copy the template file [language-selector.html.twig](templates/partials/language-selector.html.twig) into the `templates` folder of your custom theme: + +``` +/yoursite/user/themes/custom-theme/templates/partials/language-selector.html.twig +``` + +You can now edit the override and tweak it however you prefer. + +## Usage of the `hreflang` partial + +A second template is available for `hreflang` annotations in the header of the page. In order to emit language annotations for the available languages of a page you need to add the corrsponding Twig partial template into the `` section of your page, which can typically be found in `base.html.twig`: + +``` +{% include 'partials/language-selector.hreflang.html.twig' %} +``` + +This will generate something like: + +``` + + + +``` + +# Configuration + +## Plugin + +Simply copy the `user/plugins/language-selector/language-selector.yaml` into `user/config/plugins/language-selector.yaml` and make your modifications. + +``` +enabled: true +built_in_css: true +button_display: default +select_display: default +``` + +Options are pretty self explanatory. + +## Redirecting after switching language + +To have Grav redirect to the default page route after switching language, you must add the following configuration to `user/config/system.yaml` +``` +pages: + redirect_default_route: true +``` + +# Credits + +[Language Selector](https://github.com/clemdesign/grav-plugin-language-selector) is based on [Lang Switcher](https://github.com/getgrav/grav-plugin-langswitcher) plugin. diff --git a/assets/readme_1.jpg b/assets/readme_1.jpg new file mode 100644 index 0000000..1a4438d Binary files /dev/null and b/assets/readme_1.jpg differ diff --git a/blueprints.yaml b/blueprints.yaml new file mode 100644 index 0000000..845d089 --- /dev/null +++ b/blueprints.yaml @@ -0,0 +1,68 @@ +name: Language Selector +version: 1.0.0 +description: Language Selector is a [Grav](http://github.com/getgrav/grav) plugin that provides native language selector with flags to switch between [multiple languages](http://learn.getgrav.org/content/multi-language). +icon: globe +author: + name: Clément G. + email: contact@clemdesign.fr + url: http://www.clemdesign.fr +homepage: https://github.com/clemdesign/grav-plugin-language-selector +keywords: mulitlang, multilanguage, translation, switcher, selector, flag +bugs: https://github.com/clemdesign/grav-plugin-language-selector/issues +docs: https://github.com/clemdesign/grav-plugin-language-selector/blob/master/README.md +license: MIT + +form: + validation: strict + fields: + enabled: + type: toggle + label: PLUGINS.LANGUAGE_SELECTOR.PLUGIN_STATUS + highlight: 1 + default: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + built_in_css: + type: toggle + label: PLUGINS.LANGUAGE_SELECTOR.BUILT_IN_CSS + highlight: 1 + default: 1 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + untranslated_pages_behavior: + type: select + label: PLUGINS.LANGUAGE_SELECTOR.UNTRANSLATED_PAGES.LABEL + help: PLUGINS.LANGUAGE_SELECTOR.UNTRANSLATED_PAGES.HELP + default: none + options: + none: PLUGINS.LANGUAGE_SELECTOR.UNTRANSLATED_PAGES.OPT_NONE + redirect: PLUGINS.LANGUAGE_SELECTOR.UNTRANSLATED_PAGES.OPT_REDIR + hide: PLUGINS.LANGUAGE_SELECTOR.UNTRANSLATED_PAGES.OPT_HIDE + + button_display: + type: select + label: PLUGINS.LANGUAGE_SELECTOR.BUTTON_DISPLAY.LABEL + help: PLUGINS.LANGUAGE_SELECTOR.BUTTON_DISPLAY.HELP + default: default + options: + default: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.OPT_DEFAULT + flag: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.OPT_FLAG + name: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.OPT_NAME + + select_display: + type: select + label: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.LABEL + help: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.HELP + default: default + options: + default: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.OPT_DEFAULT + flag: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.OPT_FLAG + name: PLUGINS.LANGUAGE_SELECTOR.SELECT_DISPLAY.OPT_NAME diff --git a/css/language-selector.css b/css/language-selector.css new file mode 100644 index 0000000..277a6a5 --- /dev/null +++ b/css/language-selector.css @@ -0,0 +1,87 @@ +.language-selector { + float: right; + position: relative; + top: 50%; + vertical-align: middle; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + margin: 0 1rem !important; + display: inline-block; +} + +.language-selector>.btn:first-child { + margin-left: 0; +} + +.language-selector .btn { + float: left; + position: relative; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + user-select: none; + background-image: none; + border: 1px solid transparent; + /* size */ + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; + /* Aspect */ + color: #333; + background-color: #fff; + border-color: #ccc; +} + +.language-selector .dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border-radius: 4px; + box-shadow: 0 6px 12px rgba(0,0,0,.175); +} + +.language-selector .dropdown-menu img { + width: 24px; + height: 12px; + max-width: inherit; +} + +.language-selector .dropdown-menu li { + line-height: 1rem; + font-color: #c0c0c0; + display: list-item; + text-align: -webkit-match-parent; +} + +.language-selector .dropdown-menu li:hover { + background-color: #eee; +} + +.language-selector .dropdown-menu>li>a { + display: block; + padding: 3px 15px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} diff --git a/flags/af.png b/flags/af.png new file mode 100644 index 0000000..37d9b65 Binary files /dev/null and b/flags/af.png differ diff --git a/flags/ar.png b/flags/ar.png new file mode 100644 index 0000000..fcae7f9 Binary files /dev/null and b/flags/ar.png differ diff --git a/flags/be.png b/flags/be.png new file mode 100644 index 0000000..d426c2c Binary files /dev/null and b/flags/be.png differ diff --git a/flags/bg.png b/flags/bg.png new file mode 100644 index 0000000..503758a Binary files /dev/null and b/flags/bg.png differ diff --git a/flags/bo.png b/flags/bo.png new file mode 100644 index 0000000..627bc3f Binary files /dev/null and b/flags/bo.png differ diff --git a/flags/ca.png b/flags/ca.png new file mode 100644 index 0000000..613c289 Binary files /dev/null and b/flags/ca.png differ diff --git a/flags/cs.png b/flags/cs.png new file mode 100644 index 0000000..0348b37 Binary files /dev/null and b/flags/cs.png differ diff --git a/flags/da.png b/flags/da.png new file mode 100644 index 0000000..7cee949 Binary files /dev/null and b/flags/da.png differ diff --git a/flags/de.png b/flags/de.png new file mode 100644 index 0000000..93e02c3 Binary files /dev/null and b/flags/de.png differ diff --git a/flags/el.png b/flags/el.png new file mode 100644 index 0000000..3542815 Binary files /dev/null and b/flags/el.png differ diff --git a/flags/en.png b/flags/en.png new file mode 100644 index 0000000..84b934a Binary files /dev/null and b/flags/en.png differ diff --git a/flags/eo.png b/flags/eo.png new file mode 100644 index 0000000..3242f00 Binary files /dev/null and b/flags/eo.png differ diff --git a/flags/es.png b/flags/es.png new file mode 100644 index 0000000..27ac462 Binary files /dev/null and b/flags/es.png differ diff --git a/flags/et.png b/flags/et.png new file mode 100644 index 0000000..bb29aba Binary files /dev/null and b/flags/et.png differ diff --git a/flags/eu.png b/flags/eu.png new file mode 100644 index 0000000..f2a1e52 Binary files /dev/null and b/flags/eu.png differ diff --git a/flags/fa.png b/flags/fa.png new file mode 100644 index 0000000..03e3101 Binary files /dev/null and b/flags/fa.png differ diff --git a/flags/fi.png b/flags/fi.png new file mode 100644 index 0000000..0914433 Binary files /dev/null and b/flags/fi.png differ diff --git a/flags/fil.png b/flags/fil.png new file mode 100644 index 0000000..f220af2 Binary files /dev/null and b/flags/fil.png differ diff --git a/flags/fo.png b/flags/fo.png new file mode 100644 index 0000000..acc4e68 Binary files /dev/null and b/flags/fo.png differ diff --git a/flags/fr.png b/flags/fr.png new file mode 100644 index 0000000..21ac90f Binary files /dev/null and b/flags/fr.png differ diff --git a/flags/ga.png b/flags/ga.png new file mode 100644 index 0000000..ab14e96 Binary files /dev/null and b/flags/ga.png differ diff --git a/flags/gl.png b/flags/gl.png new file mode 100644 index 0000000..84a1802 Binary files /dev/null and b/flags/gl.png differ diff --git a/flags/he.png b/flags/he.png new file mode 100644 index 0000000..e32439c Binary files /dev/null and b/flags/he.png differ diff --git a/flags/hi.png b/flags/hi.png new file mode 100644 index 0000000..d75f559 Binary files /dev/null and b/flags/hi.png differ diff --git a/flags/hr.png b/flags/hr.png new file mode 100644 index 0000000..24fa77a Binary files /dev/null and b/flags/hr.png differ diff --git a/flags/hu.png b/flags/hu.png new file mode 100644 index 0000000..d967480 Binary files /dev/null and b/flags/hu.png differ diff --git a/flags/id.png b/flags/id.png new file mode 100644 index 0000000..6bf9bfe Binary files /dev/null and b/flags/id.png differ diff --git a/flags/is.png b/flags/is.png new file mode 100644 index 0000000..3987457 Binary files /dev/null and b/flags/is.png differ diff --git a/flags/it.png b/flags/it.png new file mode 100644 index 0000000..7131202 Binary files /dev/null and b/flags/it.png differ diff --git a/flags/ja.png b/flags/ja.png new file mode 100644 index 0000000..8eabe66 Binary files /dev/null and b/flags/ja.png differ diff --git a/flags/km.png b/flags/km.png new file mode 100644 index 0000000..af10328 Binary files /dev/null and b/flags/km.png differ diff --git a/flags/ko.png b/flags/ko.png new file mode 100644 index 0000000..10a73bd Binary files /dev/null and b/flags/ko.png differ diff --git a/flags/lb.png b/flags/lb.png new file mode 100644 index 0000000..6e596bb Binary files /dev/null and b/flags/lb.png differ diff --git a/flags/lt.png b/flags/lt.png new file mode 100644 index 0000000..a1bdc47 Binary files /dev/null and b/flags/lt.png differ diff --git a/flags/lv.png b/flags/lv.png new file mode 100644 index 0000000..f8adb5d Binary files /dev/null and b/flags/lv.png differ diff --git a/flags/mn.png b/flags/mn.png new file mode 100644 index 0000000..355b43d Binary files /dev/null and b/flags/mn.png differ diff --git a/flags/ms.png b/flags/ms.png new file mode 100644 index 0000000..dd36ead Binary files /dev/null and b/flags/ms.png differ diff --git a/flags/nb.png b/flags/nb.png new file mode 100644 index 0000000..9033598 Binary files /dev/null and b/flags/nb.png differ diff --git a/flags/nl.png b/flags/nl.png new file mode 100644 index 0000000..ad752ce Binary files /dev/null and b/flags/nl.png differ diff --git a/flags/nn.png b/flags/nn.png new file mode 100644 index 0000000..9033598 Binary files /dev/null and b/flags/nn.png differ diff --git a/flags/pl.png b/flags/pl.png new file mode 100644 index 0000000..1a0988b Binary files /dev/null and b/flags/pl.png differ diff --git a/flags/pt-br.png b/flags/pt-br.png new file mode 100644 index 0000000..22a8df7 Binary files /dev/null and b/flags/pt-br.png differ diff --git a/flags/pt-pt.png b/flags/pt-pt.png new file mode 100644 index 0000000..66d5bd7 Binary files /dev/null and b/flags/pt-pt.png differ diff --git a/flags/ro.png b/flags/ro.png new file mode 100644 index 0000000..a5be3be Binary files /dev/null and b/flags/ro.png differ diff --git a/flags/ru.png b/flags/ru.png new file mode 100644 index 0000000..97c436d Binary files /dev/null and b/flags/ru.png differ diff --git a/flags/sco.png b/flags/sco.png new file mode 100644 index 0000000..d3bd37a Binary files /dev/null and b/flags/sco.png differ diff --git a/flags/se.png b/flags/se.png new file mode 100644 index 0000000..0d73a70 Binary files /dev/null and b/flags/se.png differ diff --git a/flags/sk.png b/flags/sk.png new file mode 100644 index 0000000..5d303f7 Binary files /dev/null and b/flags/sk.png differ diff --git a/flags/sl.png b/flags/sl.png new file mode 100644 index 0000000..356442f Binary files /dev/null and b/flags/sl.png differ diff --git a/flags/so.png b/flags/so.png new file mode 100644 index 0000000..0a9eb3b Binary files /dev/null and b/flags/so.png differ diff --git a/flags/sq.png b/flags/sq.png new file mode 100644 index 0000000..3244bbd Binary files /dev/null and b/flags/sq.png differ diff --git a/flags/sr.png b/flags/sr.png new file mode 100644 index 0000000..bca54f1 Binary files /dev/null and b/flags/sr.png differ diff --git a/flags/sv.png b/flags/sv.png new file mode 100644 index 0000000..bb27ed1 Binary files /dev/null and b/flags/sv.png differ diff --git a/flags/tg.png b/flags/tg.png new file mode 100644 index 0000000..9a377f4 Binary files /dev/null and b/flags/tg.png differ diff --git a/flags/th.png b/flags/th.png new file mode 100644 index 0000000..9e9abd2 Binary files /dev/null and b/flags/th.png differ diff --git a/flags/tl.png b/flags/tl.png new file mode 100644 index 0000000..ffd461d Binary files /dev/null and b/flags/tl.png differ diff --git a/flags/tr.png b/flags/tr.png new file mode 100644 index 0000000..60287a4 Binary files /dev/null and b/flags/tr.png differ diff --git a/flags/uk.png b/flags/uk.png new file mode 100644 index 0000000..485b5d0 Binary files /dev/null and b/flags/uk.png differ diff --git a/flags/vi.png b/flags/vi.png new file mode 100644 index 0000000..2adcc20 Binary files /dev/null and b/flags/vi.png differ diff --git a/flags/zh-hans.png b/flags/zh-hans.png new file mode 100644 index 0000000..3665064 Binary files /dev/null and b/flags/zh-hans.png differ diff --git a/flags/zh-hant.png b/flags/zh-hant.png new file mode 100644 index 0000000..9c75444 Binary files /dev/null and b/flags/zh-hant.png differ diff --git a/js/language-selector.js b/js/language-selector.js new file mode 100644 index 0000000..a53ca0f --- /dev/null +++ b/js/language-selector.js @@ -0,0 +1,76 @@ +/*! + * Language Selector JS plugin + * Copyright 2017 Clement G., Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +var dropdownmenu={ + animspeed: 200, //reveal animation speed (in milliseconds) + showhidedelay: [150, 150], //delay before menu appears and disappears when mouse rolls over it, in milliseconds + + //***** NO NEED TO EDIT BEYOND HERE + builtdropdownids: [], //ids of dropdown already built (to prevent repeated building of same dropdown) + + showbox:function($, $dropdown, e){ + clearTimeout($dropdown.data('timers').hidetimer) + $dropdown.data('timers').showtimer=setTimeout(function(){$dropdown.show(dropdownmenu.animspeed)}, this.showhidedelay[0]) + }, + + hidebox:function($, $dropdown){ + clearTimeout($dropdown.data('timers').showtimer) + $dropdown.data('timers').hidetimer=setTimeout(function(){$dropdown.hide(100)}, this.showhidedelay[1]) //hide dropdown plus all of its sub ULs + }, + + + builddropdown:function($, $menu, $target){ + $menu.css({display:'none'}).addClass('jqdropdown') + $menu.bind('mouseenter', function(){ + clearTimeout($menu.data('timers').hidetimer) + }) + $menu.bind('mouseleave', function(){ //hide menu when mouse moves out of it + dropdownmenu.hidebox($, $menu) + }) + $menu.data('dimensions', {w:$menu.outerWidth(), h:$menu.outerHeight()}) //remember main menu's dimensions + $menu.data('timers', {}) + this.builtdropdownids.push($menu.get(0).id) //remember id of dropdown that was just built + }, + + + + init:function($, $target, $dropdown){ + if (this.builtdropdownids.length==0){ //only bind click event to document once + $(document).bind("click", function(e){ + if (e.button==0){ //hide all dropdown (and their sub ULs) when left mouse button is clicked + $('.jqdropdown').find('ul').andSelf().hide() + } + }) + } + if (jQuery.inArray($dropdown.get(0).id, this.builtdropdownids)==-1) //if this dropdown hasn't been built yet + this.builddropdown($, $dropdown, $target) + if ($target.parents().filter('ul.jqdropdown').length>0) //if $target matches an element within the dropdown markup, don't bind ondropdown to that element + return + $target.bind("mouseenter", function(e){ + dropdownmenu.showbox($, $dropdown, e) + }) + $target.bind("mouseleave", function(e){ + dropdownmenu.hidebox($, $dropdown) + }) + } +}; + +jQuery.fn.adddropdown=function(dropdownid){ + var $=jQuery + return this.each(function(){ //return jQuery obj + var $target=$(this) + if ($('#'+dropdownid).length==1) //check dropdown is defined + dropdownmenu.init($, $target, $('#'+dropdownid)) + }) +}; + +//By default, add dropdown to anchor links with attribute "data-dropdown" +jQuery(document).ready(function($){ + var $anchors=$('*[data-dropdown]') + $anchors.each(function(){ + $(this).adddropdown(this.getAttribute('data-dropdown')) + }) +}); diff --git a/language-selector.php b/language-selector.php new file mode 100644 index 0000000..26f50d4 --- /dev/null +++ b/language-selector.php @@ -0,0 +1,109 @@ + ['onPluginsInitialized', 0] + ]; + } + + /** + * Initialize configuration + */ + public function onPluginsInitialized() + { + if ($this->isAdmin()) { + $this->active = false; + return; + } + + $this->enable([ + 'onTwigInitialized' => ['onTwigInitialized', 0], + 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0], + 'onTwigSiteVariables' => ['onTwigSiteVariables', 0] + ]); + } + + /** Add the native_name function */ + public function onTwigInitialized() + { + $this->grav['twig']->twig()->addFunction( + new \Twig_SimpleFunction('native_name', function($key) { + return LanguageCodes::getNativeName($key); + }) + ); + } + + /** + * Add current directory to twig lookup paths. + */ + public function onTwigTemplatePaths() + { + $this->grav['twig']->twig_paths[] = __DIR__ . '/templates'; + } + + /** + * Set needed variables to display Language-Selector. + */ + public function onTwigSiteVariables() + { + $data = new \stdClass; + + // Manage Data content + $page = $this->grav['page']; + $data->page_route = $page->rawRoute(); + if ($page->home()) { + $data->page_route = '/'; + } + + $languages = $this->grav['language']->getLanguages(); + $data->languages = $languages; + + if ($this->config->get('plugins.language-selector.untranslated_pages_behavior') !== 'none') { + $translated_pages = []; + foreach ($languages as $language) { + $translated_pages[$language] = null; + $page_name_without_ext = substr($page->name(), 0, -(strlen($page->extension()))); + $translated_page_path = $page->path() . DS . $page_name_without_ext . '.' . $language . '.md'; + if (file_exists($translated_page_path)) { + $translated_page = new Page(); + $translated_page->init(new \SplFileInfo($translated_page_path), $language . '.md'); + $translated_pages[$language] = $translated_page; + } + } + $data->translated_pages = $translated_pages; + } + + $data->current = $this->grav['language']->getLanguage(); + + // Manage Twig Variables + $path_flags = $this->grav['locator']->findResource('plugin://language-selector/flags/', false) . "/"; + $path_flags = $this->grav['base_url'] ."/". ltrim($path_flags, '/'); + $this->grav['twig']->twig_vars['language_selector'] = $data; + $this->grav['twig']->twig_vars['language_display'] = array( + "select" => $this->config->get('plugins.language-selector.select_display'), + "button" => $this->config->get('plugins.language-selector.button_display'), + ); + $this->grav['twig']->twig_vars['path_flags'] = $path_flags; + + // Manage Assets + if ($this->config->get('plugins.language-selector.built_in_css')) { + $this->grav['assets']->add('plugin://language-selector/css/language-selector.css'); + } + $this->grav['assets']->add('plugin://language-selector/js/language-selector.js'); + } + + public function getNativeName($code) { + + } +} diff --git a/language-selector.yaml b/language-selector.yaml new file mode 100644 index 0000000..4a804cf --- /dev/null +++ b/language-selector.yaml @@ -0,0 +1,5 @@ +enabled: true +built_in_css: true +untranslated_pages_behavior: none +button_display: default +select_display: default diff --git a/languages.yaml b/languages.yaml new file mode 100644 index 0000000..3748ce7 --- /dev/null +++ b/languages.yaml @@ -0,0 +1,43 @@ +# English +en: + PLUGINS: + LANGUAGE_SELECTOR: + PLUGIN_STATUS: 'Plugin status' + BUILT_IN_CSS: 'Use built in CSS' + UNTRANSLATED_PAGES: + LABEL: 'Untranslated pages behavior' + HELP: 'Determine what to do with a language link when the current page doesn''t exist in that language or it exists but it''s not published.' + OPT_NONE: 'Show language (default)' + OPT_REDIR: 'Show language, link to home route' + OPT_HIDE: 'Hide language' + BUTTON_DISPLAY: + LABEL: 'Button Display' + HELP: 'Define how button of selected language will be displayed' + SELECT_DISPLAY: + LABEL: 'Selector Display' + HELP: 'Define how language selector will be displayed' + OPT_DEFAULT: 'Flag + Language name' + OPT_FLAG: 'Only the flag' + OPT_NAME: 'Only the language name' + +# French +fr: + PLUGINS: + LANGUAGE_SELECTOR: + PLUGIN_STATUS: 'Statut du plugin' + BUILT_IN_CSS: 'Utiliser CSS du plugin' + UNTRANSLATED_PAGES: + LABEL: 'Comportement des pages non-traduites' + HELP: 'Définit le comportement des liens lorsque la page n''existe pas dans la langue courante, ou bien existe mais non publié' + OPT_NONE: 'Affiche le langage (par défaut)' + OPT_REDIR: 'Affiche le langage, lié à l''URL de base' + OPT_HIDE: 'Cache le langage' + BUTTON_DISPLAY: + LABEL: 'Affichage du boutton' + HELP: 'Définit l''affichage du bouton de language sélectioné' + SELECT_DISPLAY: + LABEL: 'Affichage du sélecteur' + HELP: 'Définit l''affichage du sélecteur de language' + OPT_DEFAULT: 'Drapeau + Nom de la langue' + OPT_FLAG: 'Seulement le drapeau' + OPT_NAME: 'Seulement le nom de la langue' \ No newline at end of file diff --git a/templates/partials/language-selector.hreflang.html.twig b/templates/partials/language-selector.hreflang.html.twig new file mode 100644 index 0000000..6ffa3db --- /dev/null +++ b/templates/partials/language-selector.hreflang.html.twig @@ -0,0 +1,9 @@ +{% set langobj = grav['language'] %} +{% for key in language_selector.languages %} +{% if key == language_selector.current %} + {% set lang_url = page.url %} +{% else %} + {% set lang_url = base_url_simple ~ langobj.getLanguageURLPrefix(key) ~ language_selector.page_route ~ page.urlExtension ?: '/' %} +{% endif %} + +{% endfor %} \ No newline at end of file diff --git a/templates/partials/language-selector.html.twig b/templates/partials/language-selector.html.twig new file mode 100644 index 0000000..7e19f0e --- /dev/null +++ b/templates/partials/language-selector.html.twig @@ -0,0 +1,49 @@ +
+ + + +