Skip to content

Commit

Permalink
use formal version of German if default_language is set to 'de_DE'
Browse files Browse the repository at this point in the history
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
  • Loading branch information
schiessle committed Nov 30, 2017
1 parent 49ec86a commit a37f701
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 2 deletions.
10 changes: 8 additions & 2 deletions lib/private/L10N/Factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,16 +156,22 @@ public function findLanguage($app = null) {
}
}

$defaultLanguage = $this->config->getSystemValue('default_language', false);

try {
// Try to get the language from the Request
$lang = $this->getLanguageFromRequest($app);
// use formal version of german ("Sie" instead of "Du") if the default
// language is set to 'de_DE'
if (strtolower($lang) === 'de' && strtolower($defaultLanguage) === 'de_de') {
$lang = 'de_DE';
}
if ($userId !== null && $app === null && !$userLang) {
$this->config->setUserValue($userId, 'core', 'lang', $lang);
}
return $lang;
} catch (LanguageNotFoundException $e) {
// Finding language from request failed fall back to default language
$defaultLanguage = $this->config->getSystemValue('default_language', false);
if ($defaultLanguage !== false && $this->languageExists($app, $defaultLanguage)) {
return $defaultLanguage;
}
Expand Down Expand Up @@ -245,7 +251,7 @@ public function languageExists($app, $lang) {
* @return string
* @throws LanguageNotFoundException
*/
private function getLanguageFromRequest($app) {
protected function getLanguageFromRequest($app) {
$header = $this->request->getHeader('ACCEPT_LANGUAGE');
if ($header) {
$available = $this->findAvailableLanguages($app);
Expand Down
59 changes: 59 additions & 0 deletions tests/lib/L10N/FactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -513,4 +513,63 @@ public function testFindLanguage($loggedIn, $availableLang, $expected) {
$this->assertSame($expected, $lang);

}

public function dataTestFindLanguageGerman() {
return [
['de', 'de'],
[false, 'de'],
['de_DE', 'de_DE']
];
}

/**
* @dataProvider dataTestFindLanguageGerman
*
* test if we keep non-formal german ('Du' instead of 'Sie') if it is set explicitly
* and default to the formal version if default_language is set to 'de_DE'
*/
public function testFindLanguageGerman($defaultLanguage, $expected) {
$availableLang = ['de'];
$browserLang = 'de';

$this->config->expects($this->any())
->method('getSystemValue')->willReturnCallback(function($key, $default) use ($defaultLanguage) {
if ($key === 'installed') return true;
if ($key === 'default_language') return $defaultLanguage;
});

$this->config->expects($this->any())
->method('getUserValue')->willReturn(null);

$user = $this->getMockBuilder(IUser::class)
->getMock();
$user->expects($this->any())
->method('getUID')
->willReturn('MyUserUid');
$this->userSession
->expects($this->any())
->method('getUser')
->willReturn($user);
$this->config->expects($this->any())
->method('getUserValue')
->with('MyUserUid', 'core', 'lang', null)
->willReturn(null);

$factory = $this->getFactory(['languageExists', 'findAvailableLanguages', 'getLanguageFromRequest']);

$factory->expects($this->any())
->method('languageExists')
->will($this->returnCallback(function ($app, $lang) use ($availableLang) {
return in_array($lang, $availableLang);
}));

$factory->expects($this->any())
->method('getLanguageFromRequest')
->willReturn($browserLang);


$lang = $factory->findLanguage(null);
$this->assertSame($expected, $lang);

}
}

0 comments on commit a37f701

Please sign in to comment.