Преглед изворни кода

feat: reduce available languages per config value "reduce_to_languages"

Example: restrict to en, de, es, fr, it' languages

./occ config:system:set reduce_to_languages 0  --value  en
./occ config:system:set reduce_to_languages 1  --value  de
./occ config:system:set reduce_to_languages 2  --value  es
./occ config:system:set reduce_to_languages 3  --value  fr
./occ config:system:set reduce_to_languages 4  --value  it

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
pull/44876/head
Misha M.-Kupriyanov пре 2 месеци
родитељ
комит
0dd1b945e7
2 измењених фајлова са 51 додато и 0 уклоњено
  1. 4
    0
      lib/private/L10N/Factory.php
  2. 47
    0
      tests/lib/L10N/FactoryTest.php

+ 4
- 0
lib/private/L10N/Factory.php Прегледај датотеку

@@ -628,6 +628,10 @@ class Factory implements IFactory {
}

$languageCodes = $this->findAvailableLanguages();
$reduceToLanguages = $this->config->getSystemValue('reduce_to_languages', []);
if (!empty($reduceToLanguages)) {
$languageCodes = array_intersect($languageCodes, $reduceToLanguages);
}

$commonLanguages = [];
$otherLanguages = [];

+ 47
- 0
tests/lib/L10N/FactoryTest.php Прегледај датотеку

@@ -672,6 +672,53 @@ class FactoryTest extends TestCase {
self::assertSame($expected, $result);
}

public static function dataTestReduceToLanguages(): array {
return [
['en', ['en', 'de', 'fr', 'it', 'es'], ['en', 'fr', 'de'], ['en', 'fr', 'de']],
['en', ['en', 'de', 'fr', 'it', 'es'], ['en', 'de'], ['en', 'de']],
['en', ['en', 'de', 'fr', 'it', 'es'], [], ['de', 'en', 'es', 'fr', 'it']],
];
}

/**
* test
* - if available languages set can be reduced by configuration
* - if available languages set is not reduced to an empty set if
* the reduce config is an empty set
*
* @dataProvider dataTestReduceToLanguages
*
* @param string $lang
* @param array $availableLanguages
* @param array $reducedLanguageSet
* @param array $expected
*/
public function testReduceLanguagesByConfiguration(string $lang, array $availableLanguages, array $reducedLanguageSet, array $expected): void {
$factory = $this->getFactory(['findAvailableLanguages', 'languageExists']);
$factory->expects(self::any())
->method('languageExists')->willReturn(true);
$factory->expects(self::any())
->method('findAvailableLanguages')
->willReturnCallback(function ($app) use ($availableLanguages) {
return $availableLanguages;
});

$this->config
->method('getSystemValue')
->willReturnMap([
['force_language', false, false],
['default_language', false, $lang],
['reduce_to_languages', [], $reducedLanguageSet]
]);

$result = $this->invokePrivate($factory, 'getLanguages');
$commonLanguagesCodes = array_map(function ($lang) {
return $lang['code'];
}, $result['commonLanguages']);

self::assertEqualsCanonicalizing($expected, $commonLanguagesCodes);
}

public function languageIteratorRequestProvider():array {
return [
[ true, $this->createMock(IUser::class)],

Loading…
Откажи
Сачувај