Do not load translations from a relative path

When the application is installed outside of the
document root, loading translations will not work.
This commit is contained in:
Frederic Guillot 2016-11-15 20:43:14 -05:00
parent ebb6b2827d
commit 94cd5869bf
No known key found for this signature in database
GPG Key ID: 92D77191BA7FBC99
2 changed files with 62 additions and 9 deletions

View File

@ -10,13 +10,6 @@ namespace Kanboard\Core;
*/
class Translator
{
/**
* Locale path
*
* @var string
*/
const PATH = 'app/Locale';
/**
* Locale
*
@ -171,9 +164,13 @@ class Translator
* @param string $language Locale code: fr_FR
* @param string $path Locale folder
*/
public static function load($language, $path = self::PATH)
public static function load($language, $path = '')
{
$filename = $path.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.'translations.php';
if ($path === '') {
$path = self::getDefaultFolder();
}
$filename = implode(DIRECTORY_SEPARATOR, array($path, $language, 'translations.php'));
if (file_exists($filename)) {
self::$locales = array_merge(self::$locales, require($filename));
@ -190,4 +187,15 @@ class Translator
{
self::$locales = array();
}
/**
* Get default locales folder
*
* @access public
* @return string
*/
public static function getDefaultFolder()
{
return implode(DIRECTORY_SEPARATOR, array(__DIR__, '..', 'Locale'));
}
}

View File

@ -0,0 +1,45 @@
<?php
require_once __DIR__.'/../Base.php';
use Kanboard\Core\Translator;
class TranslatorTest extends Base
{
public function setUp()
{
parent::setUp();
Translator::unload();
}
public function testLoading()
{
$translator = new Translator();
$this->assertSame('Yes', $translator->translate('Yes'));
Translator::load('fr_FR');
$this->assertSame('Oui', $translator->translate('Yes'));
Translator::unload();
$this->assertSame('Yes', $translator->translate('Yes'));
Translator::load('de_DE', Translator::getDefaultFolder());
$this->assertSame('Ja', $translator->translate('Yes'));
}
public function testNumberFormatting()
{
$translator = new Translator();
$this->assertSame('1,024.42', $translator->number(1024.42));
Translator::load('fr_FR');
$this->assertSame('1 024,42', $translator->number(1024.42));
}
public function testTranslateEscaping()
{
$translator = new Translator();
$this->assertSame('&lt;b&gt;', $translator->translate('<b>'));
$this->assertSame('<b>', $translator->translateNoEscaping('<b>'));
}
}