aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Server.php3
-rw-r--r--lib/private/l10n/factory.php51
-rw-r--r--tests/data/themes/abc/apps/files/l10n/zz.json0
-rw-r--r--tests/lib/l10n/factorytest.php28
-rw-r--r--tests/lib/l10n/l10nlegacytest.php2
-rw-r--r--tests/lib/l10n/l10ntest.php2
6 files changed, 67 insertions, 19 deletions
diff --git a/lib/private/Server.php b/lib/private/Server.php
index d68a361955f..48ee4b27d32 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -261,7 +261,8 @@ class Server extends ServerContainer implements IServerContainer {
return new \OC\L10N\Factory(
$c->getConfig(),
$c->getRequest(),
- $c->getUserSession()
+ $c->getUserSession(),
+ \OC::$SERVERROOT
);
});
$this->registerService('URLGenerator', function (Server $c) {
diff --git a/lib/private/l10n/factory.php b/lib/private/l10n/factory.php
index 1440e9510c5..fd093c3601b 100644
--- a/lib/private/l10n/factory.php
+++ b/lib/private/l10n/factory.php
@@ -64,17 +64,23 @@ class Factory implements IFactory {
/** @var IUserSession */
protected $userSession;
+ /** @var string */
+ protected $serverRoot;
+
/**
* @param IConfig $config
* @param IRequest $request
* @param IUserSession $userSession
+ * @param string $serverRoot
*/
public function __construct(IConfig $config,
IRequest $request,
- IUserSession $userSession) {
+ IUserSession $userSession,
+ $serverRoot) {
$this->config = $config;
$this->request = $request;
$this->userSession = $userSession;
+ $this->serverRoot = $serverRoot;
}
/**
@@ -186,6 +192,23 @@ class Factory implements IFactory {
}
}
+ // merge with translations from theme
+ $theme = $this->config->getSystemValue('theme');
+ if (!empty($theme)) {
+ $themeDir = $this->serverRoot . '/themes/' . $theme . substr($dir, strlen($this->serverRoot));
+
+ if (is_dir($themeDir)) {
+ $files = scandir($themeDir);
+ if ($files !== false) {
+ foreach ($files as $file) {
+ if (substr($file, -5) === '.json' && substr($file, 0, 4) !== 'l10n') {
+ $available[] = substr($file, 0, -5);
+ }
+ }
+ }
+ }
+ }
+
$this->availableLanguages[$key] = $available;
return $available;
}
@@ -263,22 +286,22 @@ class Factory implements IFactory {
$i18nDir = $this->findL10nDir($app);
$transFile = strip_tags($i18nDir) . strip_tags($lang) . '.json';
- if ((\OC_Helper::isSubDirectory($transFile, \OC::$SERVERROOT . '/core/l10n/')
- || \OC_Helper::isSubDirectory($transFile, \OC::$SERVERROOT . '/lib/l10n/')
- || \OC_Helper::isSubDirectory($transFile, \OC::$SERVERROOT . '/settings/l10n/')
+ if ((\OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/core/l10n/')
+ || \OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/lib/l10n/')
+ || \OC_Helper::isSubDirectory($transFile, $this->serverRoot . '/settings/l10n/')
|| \OC_Helper::isSubDirectory($transFile, \OC_App::getAppPath($app) . '/l10n/')
)
&& file_exists($transFile)) {
// load the translations file
$languageFiles[] = $transFile;
+ }
- // merge with translations from theme
- $theme = $this->config->getSystemValue('theme');
- if (!empty($theme)) {
- $transFile = \OC::$SERVERROOT . '/themes/' . $theme . substr($transFile, strlen(\OC::$SERVERROOT));
- if (file_exists($transFile)) {
- $languageFiles[] = $transFile;
- }
+ // merge with translations from theme
+ $theme = $this->config->getSystemValue('theme');
+ if (!empty($theme)) {
+ $transFile = $this->serverRoot . '/themes/' . $theme . substr($transFile, strlen($this->serverRoot));
+ if (file_exists($transFile)) {
+ $languageFiles[] = $transFile;
}
}
@@ -293,14 +316,14 @@ class Factory implements IFactory {
*/
protected function findL10nDir($app = null) {
if (in_array($app, ['core', 'lib', 'settings'])) {
- if (file_exists(\OC::$SERVERROOT . '/' . $app . '/l10n/')) {
- return \OC::$SERVERROOT . '/' . $app . '/l10n/';
+ if (file_exists($this->serverRoot . '/' . $app . '/l10n/')) {
+ return $this->serverRoot . '/' . $app . '/l10n/';
}
} else if ($app && \OC_App::getAppPath($app) !== false) {
// Check if the app is in the app folder
return \OC_App::getAppPath($app) . '/l10n/';
}
- return \OC::$SERVERROOT . '/core/l10n/';
+ return $this->serverRoot . '/core/l10n/';
}
diff --git a/tests/data/themes/abc/apps/files/l10n/zz.json b/tests/data/themes/abc/apps/files/l10n/zz.json
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/data/themes/abc/apps/files/l10n/zz.json
diff --git a/tests/lib/l10n/factorytest.php b/tests/lib/l10n/factorytest.php
index 9f5954d0ee1..e4c0eab2e6a 100644
--- a/tests/lib/l10n/factorytest.php
+++ b/tests/lib/l10n/factorytest.php
@@ -28,6 +28,9 @@ class FactoryTest extends TestCase {
/** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */
protected $userSession;
+ /** @var string */
+ protected $serverRoot;
+
public function setUp() {
parent::setUp();
@@ -42,6 +45,8 @@ class FactoryTest extends TestCase {
->getMock();
$this->userSession = $this->getMock('\OCP\IUserSession');
+
+ $this->serverRoot = \OC::$SERVERROOT;
}
/**
@@ -54,12 +59,13 @@ class FactoryTest extends TestCase {
->setConstructorArgs([
$this->config,
$this->request,
- $this->userSession
+ $this->userSession,
+ $this->serverRoot,
])
->setMethods($methods)
->getMock();
} else {
- return new Factory($this->config, $this->request, $this->userSession);
+ return new Factory($this->config, $this->request, $this->userSession, $this->serverRoot);
}
}
@@ -287,6 +293,24 @@ class FactoryTest extends TestCase {
];
}
+ public function testFindAvailableLanguagesWithThemes() {
+ $this->serverRoot .= '/tests/data';
+ $app = 'files';
+
+ $factory = $this->getFactory(['findL10nDir']);
+ $factory->expects($this->once())
+ ->method('findL10nDir')
+ ->with($app)
+ ->willReturn($this->serverRoot . '/apps/files/l10n/');
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->with('theme')
+ ->willReturn('abc');
+
+ $this->assertEquals(['en', 'zz'], $factory->findAvailableLanguages($app), '', 0.0, 10, true);
+ }
+
/**
* @dataProvider dataLanguageExists
*
diff --git a/tests/lib/l10n/l10nlegacytest.php b/tests/lib/l10n/l10nlegacytest.php
index 025f761fe5c..1df22ba36bd 100644
--- a/tests/lib/l10n/l10nlegacytest.php
+++ b/tests/lib/l10n/l10nlegacytest.php
@@ -124,7 +124,7 @@ class L10nLegacyTest extends \Test\TestCase {
}
public function testFactoryGetLanguageCode() {
- $factory = new \OC\L10N\Factory($this->getMock('OCP\IConfig'), $this->getMock('OCP\IRequest'), $this->getMock('OCP\IUserSession'));
+ $factory = new \OC\L10N\Factory($this->getMock('OCP\IConfig'), $this->getMock('OCP\IRequest'), $this->getMock('OCP\IUserSession'), \OC::$SERVERROOT);
$l = $factory->get('lib', 'de');
$this->assertEquals('de', $l->getLanguageCode());
}
diff --git a/tests/lib/l10n/l10ntest.php b/tests/lib/l10n/l10ntest.php
index 0d175954bc1..227e07056a8 100644
--- a/tests/lib/l10n/l10ntest.php
+++ b/tests/lib/l10n/l10ntest.php
@@ -31,7 +31,7 @@ class L10nTest extends TestCase {
$request = $this->getMock('OCP\IRequest');
/** @var IUserSession $userSession */
$userSession = $this->getMock('OCP\IUserSession');
- return new Factory($config, $request, $userSession);
+ return new Factory($config, $request, $userSession, \OC::$SERVERROOT);
}
public function testGermanPluralTranslations() {