mirror of
https://github.com/wintercms/winter.git
synced 2024-06-28 05:33:29 +02:00
Check overrides for parent locale when compiling language files (#242)
Credit to @mjauvin and @jaxwilko
This commit is contained in:
parent
affdcce339
commit
4f43dfd7fc
@ -194,6 +194,7 @@ class WinterUtil extends Command
|
||||
$srcPath = base_path() . '/modules/system/lang/'.$locale.'/client.php';
|
||||
|
||||
$messages = require $fallbackPath;
|
||||
|
||||
if (File::isFile($srcPath) && $fallbackPath != $srcPath) {
|
||||
$messages = array_replace_recursive($messages, require $srcPath);
|
||||
}
|
||||
@ -201,11 +202,25 @@ class WinterUtil extends Command
|
||||
/*
|
||||
* Load possible replacements from /lang
|
||||
*/
|
||||
$overrides = [];
|
||||
$parentOverrides = [];
|
||||
|
||||
$overridePath = base_path() . '/lang/'.$locale.'/system/client.php';
|
||||
if (File::isFile($overridePath)) {
|
||||
$messages = array_replace_recursive($messages, require $overridePath);
|
||||
$overrides = require $overridePath;
|
||||
}
|
||||
|
||||
if (str_contains($locale, '-')) {
|
||||
list($parentLocale, $country) = explode('-', $locale);
|
||||
|
||||
$parentOverridePath = base_path() . '/lang/'.$parentLocale.'/system/client.php';
|
||||
if (File::isFile($parentOverridePath)) {
|
||||
$parentOverrides = require $parentOverridePath;
|
||||
}
|
||||
}
|
||||
|
||||
$messages = array_replace_recursive($messages, $parentOverrides, $overrides);
|
||||
|
||||
/*
|
||||
* Compile from stub and save file
|
||||
*/
|
||||
|
85
tests/unit/system/console/WinterUtilTest.php
Normal file
85
tests/unit/system/console/WinterUtilTest.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
class WinterUtilTest extends TestCase
|
||||
{
|
||||
public function testCompileLang()
|
||||
{
|
||||
$defaultClient = base_path('/modules/system/lang/en/client.php');
|
||||
|
||||
// mv file so we can inject a test
|
||||
rename($defaultClient, $defaultClient . '.backup');
|
||||
|
||||
file_put_contents($defaultClient, '<?php return [\'winter\' => \'is coming\'];');
|
||||
|
||||
// execute compile
|
||||
$this->artisan('winter:util compile lang')->execute();
|
||||
|
||||
// validate default lang handling
|
||||
$lang = file_get_contents(base_path('modules/system/assets/js/lang/lang.en.js'));
|
||||
$this->assertStringContainsString('winter', $lang);
|
||||
$this->assertStringContainsString('is coming', $lang);
|
||||
|
||||
// simulate override
|
||||
$created = [];
|
||||
|
||||
foreach (['lang/en/system', 'lang/en-gb/system'] as $slug) {
|
||||
$path = rtrim(base_path(), '/');
|
||||
foreach (explode('/', $slug) as $dir) {
|
||||
$path = $path . '/' . $dir;
|
||||
if (!is_dir($path)) {
|
||||
mkdir($path, 0755);
|
||||
$created[] = $path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$langClient = base_path('lang/en/system/client.php');
|
||||
// handle existing file
|
||||
if (file_exists($langClient)) {
|
||||
rename($langClient, $langClient . '.backup');
|
||||
}
|
||||
|
||||
file_put_contents($langClient, '<?php return [\'winter\' => \'is epic\'];');
|
||||
|
||||
$langCountryClient = base_path('lang/en-gb/system/client.php');
|
||||
// handle existing file
|
||||
if (file_exists($langCountryClient)) {
|
||||
rename($langCountryClient, $langCountryClient . '.backup');
|
||||
}
|
||||
|
||||
file_put_contents($langCountryClient, '<?php return [\'whats_epic\' => \'winter\'];');
|
||||
|
||||
// execute compile
|
||||
$this->artisan('winter:util compile lang')->execute();
|
||||
|
||||
// validate override handling
|
||||
$lang = file_get_contents(base_path('modules/system/assets/js/lang/lang.en.js'));
|
||||
$this->assertStringContainsString('winter', $lang);
|
||||
$this->assertStringContainsString('is epic', $lang);
|
||||
|
||||
// check that lang subset has included parent overrides
|
||||
$lang = file_get_contents(base_path('modules/system/assets/js/lang/lang.en-gb.js'));
|
||||
$this->assertStringContainsString('winter', $lang);
|
||||
$this->assertStringContainsString('is epic', $lang);
|
||||
$this->assertStringContainsString('whats_epic', $lang);
|
||||
$this->assertStringContainsString('winter', $lang);
|
||||
|
||||
// restore
|
||||
unlink($defaultClient);
|
||||
rename($defaultClient . '.backup', $defaultClient);
|
||||
|
||||
foreach ([$langClient, $langCountryClient] as $client) {
|
||||
unlink($client);
|
||||
if (file_exists($client . '.backup')) {
|
||||
rename($client . '.backup', $client);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (array_reverse($created) as $dir) {
|
||||
rmdir($dir);
|
||||
}
|
||||
|
||||
// regenerate original compiled lang
|
||||
$this->artisan('winter:util compile lang')->execute();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user