12266213d0
* translation system and unit tests * Translations everywhere Dont use translation merge It is not available with PHP builtin gettext, so it would have lead to inconsistency.
173 lines
5.1 KiB
PHP
173 lines
5.1 KiB
PHP
<?php
|
|
|
|
|
|
namespace Shaarli;
|
|
|
|
|
|
use Shaarli\Config\ConfigManager;
|
|
|
|
/**
|
|
* Class LanguagesFrTest
|
|
*
|
|
* Test the translation system in PHP and gettext mode with French language.
|
|
*
|
|
* @package Shaarli
|
|
*/
|
|
class LanguagesFrTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @var string Config file path (without extension).
|
|
*/
|
|
protected static $configFile = 'tests/utils/config/configJson';
|
|
|
|
/**
|
|
* @var ConfigManager
|
|
*/
|
|
protected $conf;
|
|
|
|
/**
|
|
* Init: force French
|
|
*/
|
|
public function setUp()
|
|
{
|
|
$this->conf = new ConfigManager(self::$configFile);
|
|
$this->conf->set('translation.language', 'fr');
|
|
}
|
|
|
|
/**
|
|
* Reset the locale since gettext seems to mess with it, making it too long
|
|
*/
|
|
public static function tearDownAfterClass()
|
|
{
|
|
if (! empty(getenv('UT_LOCALE'))) {
|
|
setlocale(LC_ALL, getenv('UT_LOCALE'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test t() with a simple non identified value.
|
|
*/
|
|
public function testTranslateSingleNotIDGettext()
|
|
{
|
|
$this->conf->set('translation.mode', 'gettext');
|
|
new Languages('en', $this->conf);
|
|
$text = 'abcdé 564 fgK';
|
|
$this->assertEquals($text, t($text));
|
|
}
|
|
|
|
/**
|
|
* Test t() with a simple identified value in gettext mode.
|
|
*/
|
|
public function testTranslateSingleIDGettext()
|
|
{
|
|
$this->conf->set('translation.mode', 'gettext');
|
|
new Languages('en', $this->conf);
|
|
$text = 'permalink';
|
|
$this->assertEquals('permalien', t($text));
|
|
}
|
|
|
|
/**
|
|
* Test t() with a non identified plural form in gettext mode.
|
|
*/
|
|
public function testTranslatePluralNotIDGettext()
|
|
{
|
|
$this->conf->set('translation.mode', 'gettext');
|
|
new Languages('en', $this->conf);
|
|
$text = 'sandwich';
|
|
$nText = 'sandwiches';
|
|
// Not ID, so English fallback, and in english, plural 0
|
|
$this->assertEquals('sandwiches', t($text, $nText, 0));
|
|
$this->assertEquals('sandwich', t($text, $nText, 1));
|
|
$this->assertEquals('sandwiches', t($text, $nText, 2));
|
|
}
|
|
|
|
/**
|
|
* Test t() with an identified plural form in gettext mode.
|
|
*/
|
|
public function testTranslatePluralIDGettext()
|
|
{
|
|
$this->conf->set('translation.mode', 'gettext');
|
|
new Languages('en', $this->conf);
|
|
$text = 'shaare';
|
|
$nText = 'shaares';
|
|
$this->assertEquals('shaare', t($text, $nText, 0));
|
|
$this->assertEquals('shaare', t($text, $nText, 1));
|
|
$this->assertEquals('shaares', t($text, $nText, 2));
|
|
}
|
|
|
|
/**
|
|
* Test t() with a simple non identified value.
|
|
*/
|
|
public function testTranslateSingleNotIDPhp()
|
|
{
|
|
$this->conf->set('translation.mode', 'php');
|
|
new Languages('en', $this->conf);
|
|
$text = 'abcdé 564 fgK';
|
|
$this->assertEquals($text, t($text));
|
|
}
|
|
|
|
/**
|
|
* Test t() with a simple identified value in PHP mode.
|
|
*/
|
|
public function testTranslateSingleIDPhp()
|
|
{
|
|
$this->conf->set('translation.mode', 'php');
|
|
new Languages('en', $this->conf);
|
|
$text = 'permalink';
|
|
$this->assertEquals('permalien', t($text));
|
|
}
|
|
|
|
/**
|
|
* Test t() with a non identified plural form in PHP mode.
|
|
*/
|
|
public function testTranslatePluralNotIDPhp()
|
|
{
|
|
$this->conf->set('translation.mode', 'php');
|
|
new Languages('en', $this->conf);
|
|
$text = 'sandwich';
|
|
$nText = 'sandwiches';
|
|
// Not ID, so English fallback, and in english, plural 0
|
|
$this->assertEquals('sandwiches', t($text, $nText, 0));
|
|
$this->assertEquals('sandwich', t($text, $nText, 1));
|
|
$this->assertEquals('sandwiches', t($text, $nText, 2));
|
|
}
|
|
|
|
/**
|
|
* Test t() with an identified plural form in PHP mode.
|
|
*/
|
|
public function testTranslatePluralIDPhp()
|
|
{
|
|
$this->conf->set('translation.mode', 'php');
|
|
new Languages('en', $this->conf);
|
|
$text = 'shaare';
|
|
$nText = 'shaares';
|
|
// In english, zero is followed by plural form
|
|
$this->assertEquals('shaare', t($text, $nText, 0));
|
|
$this->assertEquals('shaare', t($text, $nText, 1));
|
|
$this->assertEquals('shaares', t($text, $nText, 2));
|
|
}
|
|
|
|
/**
|
|
* Test t() with an extension language file in gettext mode
|
|
*/
|
|
public function testTranslationExtensionGettext()
|
|
{
|
|
$this->conf->set('translation.mode', 'gettext');
|
|
$this->conf->set('translation.extensions.test', 'tests/utils/languages/');
|
|
new Languages('en', $this->conf);
|
|
$this->assertEquals('voiture', t('car', 'car', 1, 'test'));
|
|
$this->assertEquals('Fouille', t('Search', 'Search', 1, 'test'));
|
|
}
|
|
|
|
/**
|
|
* Test t() with an extension language file in PHP mode
|
|
*/
|
|
public function testTranslationExtensionPhp()
|
|
{
|
|
$this->conf->set('translation.mode', 'php');
|
|
$this->conf->set('translation.extensions.test', 'tests/utils/languages/');
|
|
new Languages('en', $this->conf);
|
|
$this->assertEquals('voiture', t('car', 'car', 1, 'test'));
|
|
$this->assertEquals('Fouille', t('Search', 'Search', 1, 'test'));
|
|
}
|
|
}
|