diff --git a/classes/adminbasecontroller.php b/classes/adminbasecontroller.php index 647c9e45..03ee9ab6 100644 --- a/classes/adminbasecontroller.php +++ b/classes/adminbasecontroller.php @@ -631,7 +631,7 @@ class AdminBaseController // now the first 4 chars of base contain the lang code. // if redirect path already contains the lang code, and is != than the base lang code, then use redirect path as-is if (Utils::pathPrefixedByLangCode($base) && Utils::pathPrefixedByLangCode($this->redirect) - && 0 !== strpos($this->redirect, substr($base, 0, 4)) + && !Utils::startsWith($this->redirect, $base) ) { $redirect = $this->redirect; } else { diff --git a/classes/admincontroller.php b/classes/admincontroller.php index fde70548..a55bdc61 100644 --- a/classes/admincontroller.php +++ b/classes/admincontroller.php @@ -2375,18 +2375,19 @@ class AdminController extends AdminBaseController */ public function determineFilenameIncludingLanguage($current_filename, $language) { - $filename = substr($current_filename, 0, -strlen('.md')); + $ext = '.md'; + $filename = substr($current_filename, 0, -strlen($ext)); + $languages_enabled = $this->grav['config']->get('system.languages.supported', []); - if (substr($filename, -3, 1) === '.') { - $filename = str_replace(substr($filename, -2), $language, $filename); - } elseif (substr($filename, -6, 1) === '.') { - $filename = str_replace(substr($filename, -5), $language, $filename); - } else { - $filename .= '.' . $language; + $parts = explode('.', trim($filename, '.')); + $lang = array_pop($parts); + + if ($lang === $language) { + return $filename . $ext; + } elseif (in_array($lang, $languages_enabled)) { + $filename = implode('.', $parts); } - return $filename . '.md'; + return $filename . '.' . $language . $ext; } - - }