diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 59ea1ee2c..bb78ded54 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -271,7 +271,8 @@ class Page implements PageInterface if ($exists) { $aPage = new Page(); $aPage->init(new SplFileInfo($path), $languageExtension); - + $aPage->route($this->route()); + $aPage->rawRoute($this->rawRoute()); $route = $aPage->header()->routes['default'] ?? $aPage->rawRoute(); if (!$route) { $route = $aPage->route(); diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index 592484a12..cfb96bc33 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -1196,7 +1196,6 @@ abstract class Utils if (count($parts) > 0 && in_array($parts[0], $languages_enabled)) { return $parts[0]; } - return false; } diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php index 59be24ede..618781de6 100644 --- a/tests/_bootstrap.php +++ b/tests/_bootstrap.php @@ -12,6 +12,10 @@ $grav = function () { $grav = Grav::instance(); $grav['config']->init(); + // This must be set first before the other init + $grav['config']->set('system.languages.supported', ['en', 'fr', 'vi']); + $grav['config']->set('system.languages.default_lang', 'en'); + foreach (array_keys($grav['setup']->getStreams()) as $stream) { @stream_wrapper_unregister($stream); } diff --git a/tests/fake/simple-site/user/pages/04.page-translated/default.en.md b/tests/fake/simple-site/user/pages/04.page-translated/default.en.md new file mode 100644 index 000000000..e69de29bb diff --git a/tests/fake/simple-site/user/pages/04.page-translated/default.fr.md b/tests/fake/simple-site/user/pages/04.page-translated/default.fr.md new file mode 100644 index 000000000..97156cc5e --- /dev/null +++ b/tests/fake/simple-site/user/pages/04.page-translated/default.fr.md @@ -0,0 +1,5 @@ +--- +title: Simple Page avec traduction +--- + +Simple Page Content in English \ No newline at end of file diff --git a/tests/fake/simple-site/user/pages/05.translatedlong/part2/default.en.md b/tests/fake/simple-site/user/pages/05.translatedlong/part2/default.en.md new file mode 100644 index 000000000..e69de29bb diff --git a/tests/fake/simple-site/user/pages/05.translatedlong/part2/default.fr.md b/tests/fake/simple-site/user/pages/05.translatedlong/part2/default.fr.md new file mode 100644 index 000000000..715706234 --- /dev/null +++ b/tests/fake/simple-site/user/pages/05.translatedlong/part2/default.fr.md @@ -0,0 +1,5 @@ +--- +title: Simple Page avec traduction +--- + +Page Simple FR \ No newline at end of file diff --git a/tests/fake/single-page-translated/user/pages/01.simple-page/default.en.md b/tests/fake/single-page-translated/user/pages/01.simple-page/default.en.md new file mode 100644 index 000000000..e69de29bb diff --git a/tests/fake/single-page-translated/user/pages/01.simple-page/default.fr.md b/tests/fake/single-page-translated/user/pages/01.simple-page/default.fr.md new file mode 100644 index 000000000..715706234 --- /dev/null +++ b/tests/fake/single-page-translated/user/pages/01.simple-page/default.fr.md @@ -0,0 +1,5 @@ +--- +title: Simple Page avec traduction +--- + +Page Simple FR \ No newline at end of file diff --git a/tests/unit/Grav/Common/Page/PagesTest.php b/tests/unit/Grav/Common/Page/PagesTest.php index 6301a1b3d..edff75bc8 100644 --- a/tests/unit/Grav/Common/Page/PagesTest.php +++ b/tests/unit/Grav/Common/Page/PagesTest.php @@ -236,6 +236,31 @@ class PagesTest extends \Codeception\TestCase\Test self::assertSame('—-▸ Blog', $list['/blog']); } + public function testTranslatedLanguages(): void + { + /** @var UniformResourceLocator $locator */ + $locator = $this->grav['locator']; + $folder = $locator->findResource('tests://'); + + $page = $this->pages->get($folder . '/fake/simple-site/user/pages/04.page-translated'); + $this->assertInstanceOf(PageInterface::class, $page); + $translatedLanguages = $page->translatedLanguages(); + $this->assertIsArray($translatedLanguages); + $this->assertSame(["en" => "/page-translated", "fr" => "/page-translated"], $translatedLanguages); + } + + public function testLongPathTranslatedLanguages(): void + { + /** @var UniformResourceLocator $locator */ + $locator = $this->grav['locator']; + $folder = $locator->findResource('tests://'); + $page = $this->pages->get($folder . '/fake/simple-site/user/pages/05.translatedlong/part2'); + $this->assertInstanceOf(PageInterface::class, $page); + $translatedLanguages = $page->translatedLanguages(); + $this->assertIsArray($translatedLanguages); + $this->assertSame(["en" => "/translatedlong/part2", "fr" => "/translatedlong/part2"], $translatedLanguages); + } + public function testGetTypes(): void { } diff --git a/tests/unit/Grav/Common/UtilsTest.php b/tests/unit/Grav/Common/UtilsTest.php index d396a2c3b..4329a454e 100644 --- a/tests/unit/Grav/Common/UtilsTest.php +++ b/tests/unit/Grav/Common/UtilsTest.php @@ -299,7 +299,9 @@ class UtilsTest extends \Codeception\TestCase\Test $oneLanguageNotEnabled = reset($languagesNotEnabled); if (count($languagesEnabled)) { - self::assertTrue(Utils::pathPrefixedByLangCode('/' . $languagesEnabled[0] . '/test')); + $languageCodePathPrefix = Utils::pathPrefixedByLangCode('/' . $languagesEnabled[0] . '/test'); + $this->assertIsString($languageCodePathPrefix); + $this->assertTrue(in_array($languageCodePathPrefix, $languagesEnabled)); } self::assertFalse(Utils::pathPrefixedByLangCode('/' . $oneLanguageNotEnabled . '/test'));