Don't force the use of Accept-Language anymore
This is not intended anymore, since it falls back to force english
when the header is not set. Also 0228bc6e66
makes clear that the order should be:
1. User setting
2. Accept language
3. Admin default
This is the case since the commit from above, unless via OCS and DAV.
Both forced to accept-language falling back to english.
By removing the force, it now also matches the w3 priority list:
https://www.w3.org/International/questions/qa-lang-priorities
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
536650c02f
commit
9f3d9b5b23
|
@ -270,24 +270,6 @@ class Factory implements IFactory {
|
||||||
throw new LanguageNotFoundException();
|
throw new LanguageNotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string|null $app App id or null for core
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function setLanguageFromRequest($app = null) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
$requestLanguage = $this->getLanguageFromRequest($app);
|
|
||||||
} catch (LanguageNotFoundException $e) {
|
|
||||||
$requestLanguage = 'en';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($app === null && !$this->requestLanguage) {
|
|
||||||
$this->requestLanguage = $requestLanguage;
|
|
||||||
}
|
|
||||||
return $requestLanguage;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if $sub is a subdirectory of $parent
|
* Checks if $sub is a subdirectory of $parent
|
||||||
*
|
*
|
||||||
|
|
|
@ -61,14 +61,6 @@ interface IFactory {
|
||||||
*/
|
*/
|
||||||
public function languageExists($app, $lang);
|
public function languageExists($app, $lang);
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string|null $app App id or null for core
|
|
||||||
* @return string
|
|
||||||
* @since 9.0.0
|
|
||||||
*/
|
|
||||||
public function setLanguageFromRequest($app = null);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a function from the plural string
|
* Creates a function from the plural string
|
||||||
*
|
*
|
||||||
|
|
|
@ -54,9 +54,6 @@ try {
|
||||||
// load all apps to get all api routes properly setup
|
// load all apps to get all api routes properly setup
|
||||||
OC_App::loadApps();
|
OC_App::loadApps();
|
||||||
|
|
||||||
// force language as given in the http request
|
|
||||||
\OC::$server->getL10NFactory()->setLanguageFromRequest();
|
|
||||||
|
|
||||||
OC::$server->getRouter()->match('/ocs'.\OC::$server->getRequest()->getRawPathInfo());
|
OC::$server->getRouter()->match('/ocs'.\OC::$server->getRequest()->getRawPathInfo());
|
||||||
return;
|
return;
|
||||||
} catch (ResourceNotFoundException $e) {
|
} catch (ResourceNotFoundException $e) {
|
||||||
|
|
|
@ -136,9 +136,6 @@ try {
|
||||||
throw new RemoteException('Path not found', OC_Response::STATUS_NOT_FOUND);
|
throw new RemoteException('Path not found', OC_Response::STATUS_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// force language as given in the http request
|
|
||||||
\OC::$server->getL10NFactory()->setLanguageFromRequest();
|
|
||||||
|
|
||||||
$file=ltrim($file, '/');
|
$file=ltrim($file, '/');
|
||||||
|
|
||||||
$parts=explode('/', $file, 2);
|
$parts=explode('/', $file, 2);
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
namespace Test\L10N;
|
namespace Test\L10N;
|
||||||
|
|
||||||
use OC\L10N\Factory;
|
use OC\L10N\Factory;
|
||||||
|
use OC\L10N\LanguageNotFoundException;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IRequest;
|
use OCP\IRequest;
|
||||||
use OCP\IUser;
|
use OCP\IUser;
|
||||||
|
@ -339,26 +340,22 @@ class FactoryTest extends TestCase {
|
||||||
public function dataSetLanguageFromRequest() {
|
public function dataSetLanguageFromRequest() {
|
||||||
return [
|
return [
|
||||||
// Language is available
|
// Language is available
|
||||||
[null, 'de', null, ['de'], 'de', 'de'],
|
[null, 'de', ['de'], 'de'],
|
||||||
[null, 'de,en', null, ['de'], 'de', 'de'],
|
[null, 'de,en', ['de'], 'de'],
|
||||||
[null, 'de-DE,en-US;q=0.8,en;q=0.6', null, ['de'], 'de', 'de'],
|
[null, 'de-DE,en-US;q=0.8,en;q=0.6', ['de'], 'de'],
|
||||||
// Language is not available
|
// Language is not available
|
||||||
[null, 'de', null, ['ru'], 'en', 'en'],
|
[null, 'de', ['ru'], new LanguageNotFoundException()],
|
||||||
[null, 'de,en', null, ['ru', 'en'], 'en', 'en'],
|
[null, 'de,en', ['ru', 'en'], 'en'],
|
||||||
[null, 'de-DE,en-US;q=0.8,en;q=0.6', null, ['ru', 'en'], 'en', 'en'],
|
[null, 'de-DE,en-US;q=0.8,en;q=0.6', ['ru', 'en'], 'en'],
|
||||||
// Language is available, but request language is set
|
|
||||||
[null, 'de', 'ru', ['de'], 'de', 'ru'],
|
|
||||||
[null, 'de,en', 'ru', ['de'], 'de', 'ru'],
|
|
||||||
[null, 'de-DE,en-US;q=0.8,en;q=0.6', 'ru', ['de'], 'de', 'ru'],
|
|
||||||
|
|
||||||
// Request lang should not be set for apps: Language is available
|
// Language for app
|
||||||
['files_pdfviewer', 'de', null, ['de'], 'de', ''],
|
['files_pdfviewer', 'de', ['de'], 'de'],
|
||||||
['files_pdfviewer', 'de,en', null, ['de'], 'de', ''],
|
['files_pdfviewer', 'de,en', ['de'], 'de'],
|
||||||
['files_pdfviewer', 'de-DE,en-US;q=0.8,en;q=0.6', null, ['de'], 'de', ''],
|
['files_pdfviewer', 'de-DE,en-US;q=0.8,en;q=0.6', ['de'], 'de'],
|
||||||
// Request lang should not be set for apps: Language is not available
|
// Language for app is not available
|
||||||
['files_pdfviewer', 'de', null, ['ru'], 'en', ''],
|
['files_pdfviewer', 'de', ['ru'], new LanguageNotFoundException()],
|
||||||
['files_pdfviewer', 'de,en', null, ['ru', 'en'], 'en', ''],
|
['files_pdfviewer', 'de,en', ['ru', 'en'], 'en'],
|
||||||
['files_pdfviewer', 'de-DE,en-US;q=0.8,en;q=0.6', null, ['ru', 'en'], 'en', ''],
|
['files_pdfviewer', 'de-DE,en-US;q=0.8,en;q=0.6', ['ru', 'en'], 'en'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -367,12 +364,10 @@ class FactoryTest extends TestCase {
|
||||||
*
|
*
|
||||||
* @param string|null $app
|
* @param string|null $app
|
||||||
* @param string $header
|
* @param string $header
|
||||||
* @param string|null $requestLanguage
|
|
||||||
* @param string[] $availableLanguages
|
* @param string[] $availableLanguages
|
||||||
* @param string $expected
|
* @param string $expected
|
||||||
* @param string $expectedLang
|
|
||||||
*/
|
*/
|
||||||
public function testSetLanguageFromRequest($app, $header, $requestLanguage, array $availableLanguages, $expected, $expectedLang) {
|
public function testGetLanguageFromRequest($app, $header, array $availableLanguages, $expected) {
|
||||||
$factory = $this->getFactory(['findAvailableLanguages']);
|
$factory = $this->getFactory(['findAvailableLanguages']);
|
||||||
$factory->expects($this->once())
|
$factory->expects($this->once())
|
||||||
->method('findAvailableLanguages')
|
->method('findAvailableLanguages')
|
||||||
|
@ -384,11 +379,12 @@ class FactoryTest extends TestCase {
|
||||||
->with('ACCEPT_LANGUAGE')
|
->with('ACCEPT_LANGUAGE')
|
||||||
->willReturn($header);
|
->willReturn($header);
|
||||||
|
|
||||||
if ($requestLanguage !== null) {
|
if ($expected instanceof LanguageNotFoundException) {
|
||||||
$this->invokePrivate($factory, 'requestLanguage', [$requestLanguage]);
|
$this->setExpectedException(LanguageNotFoundException::class);
|
||||||
|
self::invokePrivate($factory, 'getLanguageFromRequest', [$app]);
|
||||||
|
} else {
|
||||||
|
$this->assertSame($expected, self::invokePrivate($factory, 'getLanguageFromRequest', [$app]), 'Asserting returned language');
|
||||||
}
|
}
|
||||||
$this->assertSame($expected, $factory->setLanguageFromRequest($app), 'Asserting returned language');
|
|
||||||
$this->assertSame($expectedLang, $this->invokePrivate($factory, 'requestLanguage'), 'Asserting stored language');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dataGetL10nFilesForApp() {
|
public function dataGetL10nFilesForApp() {
|
||||||
|
|
Loading…
Reference in New Issue