mirror of
https://github.com/getgrav/grav.git
synced 2025-02-20 19:56:53 +01:00
Merge branch 'feature/multilang' into 1.7
# Conflicts: # CHANGELOG.md # system/blueprints/config/system.yaml
This commit is contained in:
commit
41898af46f
|
|
@ -2,7 +2,12 @@
|
|||
## mm/dd/2019
|
||||
|
||||
1. [](#new)
|
||||
* Added new `system.debugger.censored` configuration option to hide potentially sensitive information
|
||||
* Added new configuration option `system.debugger.censored` to hide potentially sensitive information
|
||||
* Added new configuration option `system.languages.include_default_lang_file_extension` to keep default language in `.md` files if set to `false`
|
||||
1. [](#bugfix)
|
||||
* Fixed `.md` page to be assigned to the default language and to be listed in translated/untranslated page list
|
||||
* Fixed `Language::getFallbackPageExtensions()` to append `.md` file after the default language extension
|
||||
* Fixed `Language::getFallbackPageExtensions()` returning wrong file extensions when passing custom page extension
|
||||
|
||||
# v1.7.0-beta.3
|
||||
## 06/24/2019
|
||||
|
|
@ -46,7 +51,7 @@
|
|||
* Fixed `url()` returning wrong path if using stream with grav root path in it, eg: `user-data://shop` when Grav is in `/shop`
|
||||
* Fixed `url()` not returning a path to non-existing file (`user-data://shop` => `/user/data/shop`) if it is set to fail gracefully
|
||||
* Fixed `url()` returning false on unknown streams, such as `ftp://domain.com`, they should be treated as external URL
|
||||
|
||||
|
||||
# v1.6.11
|
||||
## 06/21/2019
|
||||
|
||||
|
|
|
|||
|
|
@ -340,6 +340,17 @@ form:
|
|||
validate:
|
||||
type: bool
|
||||
|
||||
languages.include_default_lang_file_extension:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.INCLUDE_DEFAULT_LANG_FILE_EXTENSION
|
||||
help: PLUGIN_ADMIN.INCLUDE_DEFAULT_LANG_HELP_FILE_EXTENSION
|
||||
highlight: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
languages.pages_fallback_only:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.PAGES_FALLBACK_ONLY
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class Language
|
|||
protected $page_extensions = [];
|
||||
protected $fallback_languages = [];
|
||||
protected $default;
|
||||
protected $active = null;
|
||||
protected $active;
|
||||
|
||||
/** @var Config $config */
|
||||
protected $config;
|
||||
|
|
@ -58,7 +58,7 @@ class Language
|
|||
$this->default = reset($this->languages);
|
||||
}
|
||||
|
||||
$this->page_extensions = null;
|
||||
$this->page_extensions = [];
|
||||
|
||||
if (empty($this->languages)) {
|
||||
$this->enabled = false;
|
||||
|
|
@ -285,38 +285,50 @@ class Language
|
|||
*/
|
||||
public function getFallbackPageExtensions($file_ext = null)
|
||||
{
|
||||
if (empty($this->page_extensions)) {
|
||||
$file_ext = (string)$file_ext;
|
||||
|
||||
if (!isset($this->page_extensions[$file_ext])) {
|
||||
if (!$file_ext) {
|
||||
$file_ext = CONTENT_EXT;
|
||||
}
|
||||
|
||||
if ($this->enabled()) {
|
||||
$default = $this->getDefault() ?? 'en';
|
||||
$active = $this->getActive() ?? $default;
|
||||
|
||||
$valid_lang_extensions = [];
|
||||
foreach ($this->languages as $lang) {
|
||||
$valid_lang_extensions[] = '.' . $lang . $file_ext;
|
||||
|
||||
// First add active language.
|
||||
$valid_lang_extensions[$active] = '.' . $active . $file_ext;
|
||||
|
||||
// If active language is the same as default, count it in, too.
|
||||
if ($active === $default) {
|
||||
$valid_lang_extensions[''] = $file_ext;
|
||||
}
|
||||
|
||||
if ($this->active) {
|
||||
$active_extension = '.' . $this->active . $file_ext;
|
||||
$key = \array_search($active_extension, $valid_lang_extensions, true);
|
||||
|
||||
// Default behavior is to find any language other than active
|
||||
if ($this->config->get('system.languages.pages_fallback_only')) {
|
||||
$slice = \array_slice($valid_lang_extensions, 0, $key+1);
|
||||
$valid_lang_extensions = array_reverse($slice);
|
||||
} else {
|
||||
unset($valid_lang_extensions[$key]);
|
||||
array_unshift($valid_lang_extensions, $active_extension);
|
||||
if ($this->config->get('system.languages.pages_fallback_only')) {
|
||||
// Add the extensionless default.
|
||||
if ($active !== $default) {
|
||||
$valid_lang_extensions[$default] = '.' . $default . $file_ext;
|
||||
$valid_lang_extensions[''] = $file_ext;
|
||||
}
|
||||
} else {
|
||||
// We want to have full list of languages.
|
||||
foreach ($this->languages as $lang) {
|
||||
$valid_lang_extensions[$lang] = '.' . $lang . $file_ext;
|
||||
if ($active !== $default) {
|
||||
$valid_lang_extensions[''] = $file_ext;
|
||||
}
|
||||
}
|
||||
}
|
||||
$valid_lang_extensions[] = $file_ext;
|
||||
$this->page_extensions = $valid_lang_extensions;
|
||||
|
||||
$this->page_extensions[$file_ext] = array_values($valid_lang_extensions);
|
||||
} else {
|
||||
$this->page_extensions = (array)$file_ext;
|
||||
$this->page_extensions[$file_ext] = (array)$file_ext;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->page_extensions;
|
||||
return $this->page_extensions[$file_ext];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -332,7 +344,7 @@ class Language
|
|||
*/
|
||||
public function resetFallbackPageExtensions()
|
||||
{
|
||||
$this->page_extensions = null;
|
||||
$this->page_extensions = [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -534,4 +546,11 @@ class Language
|
|||
return LanguageCodes::get($code, $type);
|
||||
}
|
||||
|
||||
public function __debugInfo()
|
||||
{
|
||||
$vars = get_object_vars($this);
|
||||
unset($vars['grav'], $vars['config']);
|
||||
|
||||
return $vars;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ use Grav\Common\Data\Blueprint;
|
|||
use Grav\Common\File\CompiledYamlFile;
|
||||
use Grav\Common\Filesystem\Folder;
|
||||
use Grav\Common\Grav;
|
||||
use Grav\Common\Language\Language;
|
||||
use Grav\Common\Markdown\Parsedown;
|
||||
use Grav\Common\Markdown\ParsedownExtra;
|
||||
use Grav\Common\Page\Interfaces\PageInterface;
|
||||
|
|
@ -129,7 +130,10 @@ class Page implements PageInterface
|
|||
*/
|
||||
public function init(\SplFileInfo $file, $extension = null)
|
||||
{
|
||||
$config = Grav::instance()['config'];
|
||||
$grav = Grav::instance();
|
||||
|
||||
/** @var Config $config */
|
||||
$config = $grav['config'];
|
||||
|
||||
// some extension logic
|
||||
if (empty($extension)) {
|
||||
|
|
@ -139,8 +143,13 @@ class Page implements PageInterface
|
|||
}
|
||||
|
||||
// extract page language from page extension
|
||||
$language = trim(basename($this->extension(), 'md'), '.') ?: null;
|
||||
$this->language($language);
|
||||
$languageCode = trim(basename($this->extension(), 'md'), '.') ?: null;
|
||||
if (!$languageCode) {
|
||||
/** @var Language $language */
|
||||
$language = $grav['language'];
|
||||
$languageCode = $language->enabled() ? $language->getDefault() : null;
|
||||
}
|
||||
$this->language($languageCode);
|
||||
|
||||
$this->hide_home_route = $config->get('system.home.hide_in_urls', false);
|
||||
$this->home_route = $this->adjustRouteCase($config->get('system.home.alias'));
|
||||
|
|
@ -188,16 +197,32 @@ class Page implements PageInterface
|
|||
*/
|
||||
public function translatedLanguages($onlyPublished = false)
|
||||
{
|
||||
$filename = substr($this->name, 0, -(strlen($this->extension())));
|
||||
$config = Grav::instance()['config'];
|
||||
$languages = $config->get('system.languages.supported', []);
|
||||
$grav = Grav::instance();
|
||||
|
||||
/** @var Language $language */
|
||||
$language = $grav['language'];
|
||||
|
||||
$languages = $language->getLanguages();
|
||||
$defaultCode = $language->getDefault();
|
||||
|
||||
$name = substr($this->name, 0, -strlen($this->extension()));
|
||||
$translatedLanguages = [];
|
||||
|
||||
foreach ($languages as $language) {
|
||||
$path = $this->path . DS . $this->folder . DS . $filename . '.' . $language . '.md';
|
||||
if (file_exists($path)) {
|
||||
foreach ($languages as $languageCode) {
|
||||
$languageExtension = ".{$languageCode}.md";
|
||||
$path = $this->path . DS . $this->folder . DS . $name . $languageExtension;
|
||||
$exists = file_exists($path);
|
||||
|
||||
// Default language may be saved without language file location.
|
||||
if (!$exists && $languageCode === $defaultCode) {
|
||||
$languageExtension = '.md';
|
||||
$path = $this->path . DS . $this->folder . DS . $name . $languageExtension;
|
||||
$exists = file_exists($path);
|
||||
}
|
||||
|
||||
if ($exists) {
|
||||
$aPage = new Page();
|
||||
$aPage->init(new \SplFileInfo($path), $language . '.md');
|
||||
$aPage->init(new \SplFileInfo($path), $languageExtension);
|
||||
|
||||
$route = $aPage->header()->routes['default'] ?? $aPage->rawRoute();
|
||||
if (!$route) {
|
||||
|
|
@ -208,7 +233,7 @@ class Page implements PageInterface
|
|||
continue;
|
||||
}
|
||||
|
||||
$translatedLanguages[$language] = $route;
|
||||
$translatedLanguages[$languageCode] = $route;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -224,22 +249,41 @@ class Page implements PageInterface
|
|||
*/
|
||||
public function untranslatedLanguages($includeUnpublished = false)
|
||||
{
|
||||
$filename = substr($this->name, 0, -strlen($this->extension()));
|
||||
$config = Grav::instance()['config'];
|
||||
$languages = $config->get('system.languages.supported', []);
|
||||
$grav = Grav::instance();
|
||||
|
||||
/** @var Language $language */
|
||||
$language = $grav['language'];
|
||||
|
||||
$languages = $language->getLanguages();
|
||||
$defaultCode = $language->getDefault();
|
||||
|
||||
$name = substr($this->name, 0, -strlen($this->extension()));
|
||||
$untranslatedLanguages = [];
|
||||
|
||||
foreach ($languages as $language) {
|
||||
$path = $this->path . DS . $this->folder . DS . $filename . '.' . $language . '.md';
|
||||
if (file_exists($path)) {
|
||||
$aPage = new Page();
|
||||
$aPage->init(new \SplFileInfo($path), $language . '.md');
|
||||
if ($includeUnpublished && !$aPage->published()) {
|
||||
$untranslatedLanguages[] = $language;
|
||||
}
|
||||
} else {
|
||||
$untranslatedLanguages[] = $language;
|
||||
foreach ($languages as $languageCode) {
|
||||
$path = $this->path . DS . $this->folder . DS . $name . '.' . $languageCode . '.md';
|
||||
$exists = file_exists($path);
|
||||
|
||||
// Default language may be saved without language file location.
|
||||
if (!$exists && $languageCode === $defaultCode) {
|
||||
$path = $this->path . DS . $this->folder . DS . $name . '.md';
|
||||
$exists = file_exists($path);
|
||||
}
|
||||
|
||||
if ($exists) {
|
||||
if ($includeUnpublished) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$aPage = new Page();
|
||||
$aPage->init(new \SplFileInfo($path), $languageCode . '.md');
|
||||
|
||||
if (!$aPage->published()) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$untranslatedLanguages[] = $languageCode;
|
||||
}
|
||||
|
||||
return $untranslatedLanguages;
|
||||
|
|
@ -922,13 +966,16 @@ class Page implements PageInterface
|
|||
return $this->slug();
|
||||
}
|
||||
if ($name === 'name') {
|
||||
$name = $this->name();
|
||||
$language = $this->language() ? '.' . $this->language() : '';
|
||||
$name_val = str_replace($language . '.md', '', $this->name());
|
||||
$pattern = '%(' . preg_quote($language, '%') . ')?\.md$%';
|
||||
$name = preg_replace($pattern, '', $name);
|
||||
|
||||
if ($this->modular()) {
|
||||
return 'modular/' . $name_val;
|
||||
return 'modular/' . $name;
|
||||
}
|
||||
|
||||
return $name_val;
|
||||
return $name;
|
||||
}
|
||||
if ($name === 'media') {
|
||||
return $this->media()->all();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user