mirror of
https://github.com/nextcloud/server.git
synced 2025-08-16 15:41:57 +00:00
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>
This commit is contained in:

committed by
Mikhailo Matiyenko-Kupriyanov

parent
d5b7525e1f
commit
aceb4d776c
@ -5,7 +5,7 @@
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* This configuration file is only provided to document the different
|
||||
* configuration options and their usage.
|
||||
@ -228,6 +228,15 @@ $CONFIG = [
|
||||
*/
|
||||
'default_locale' => 'en_US',
|
||||
|
||||
/**
|
||||
* With this setting is possible to reduce the languages available in the
|
||||
* language chooser. The languages have to be set as array values using ISO_639-1
|
||||
* language codes such as ``en`` for English, ``de`` for German etc.
|
||||
*
|
||||
* For example: Set to ['de', 'fr'] to only allow German and French languages.
|
||||
*/
|
||||
'reduce_to_languages' => [],
|
||||
|
||||
/**
|
||||
* This sets the default region for phone numbers on your Nextcloud server,
|
||||
* using ISO 3166-1 country codes such as ``DE`` for Germany, ``FR`` for France, …
|
||||
|
@ -576,6 +576,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 = [];
|
||||
|
@ -700,6 +700,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)],
|
||||
|
Reference in New Issue
Block a user