From 12266213d098a53c5f005b9afcbbe62771fd580c Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Tue, 9 May 2017 18:12:15 +0200 Subject: Shaarli's translation * 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. --- tests/LanguagesTest.php | 184 +++++++++++++++++++++++++-- tests/UtilsTest.php | 30 ++--- tests/bootstrap.php | 6 + tests/languages/bootstrap.php | 7 +- tests/languages/fr/LanguagesFrTest.php | 173 +++++++++++++++++++++++++ tests/utils/languages/fr/LC_MESSAGES/test.mo | Bin 0 -> 456 bytes tests/utils/languages/fr/LC_MESSAGES/test.po | 19 +++ 7 files changed, 388 insertions(+), 31 deletions(-) create mode 100644 tests/bootstrap.php create mode 100644 tests/languages/fr/LanguagesFrTest.php create mode 100644 tests/utils/languages/fr/LC_MESSAGES/test.mo create mode 100644 tests/utils/languages/fr/LC_MESSAGES/test.po (limited to 'tests') diff --git a/tests/LanguagesTest.php b/tests/LanguagesTest.php index 79c136c8..46bfcd72 100644 --- a/tests/LanguagesTest.php +++ b/tests/LanguagesTest.php @@ -1,41 +1,201 @@ conf = new ConfigManager(self::$configFile); + } + + /** + * 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($text, 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'; + $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'; + // In english, zero is followed by plural form + $this->assertEquals('shaares', 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 testTranslateSingleNotID() + 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 non identified plural form. + * Test t() with a simple identified value in PHP mode. */ - public function testTranslatePluralNotID() + public function testTranslateSingleIDPhp() { - $text = '%s sandwich'; - $nText = '%s sandwiches'; - $this->assertEquals('0 sandwich', t($text, $nText)); - $this->assertEquals('1 sandwich', t($text, $nText, 1)); - $this->assertEquals('2 sandwiches', t($text, $nText, 2)); + $this->conf->set('translation.mode', 'php'); + new Languages('en', $this->conf); + $text = 'permalink'; + $this->assertEquals($text, t($text)); } /** - * Test t() with a non identified invalid plural form. + * Test t() with a non identified plural form in PHP mode. */ - public function testTranslatePluralNotIDInvalid() + public function testTranslatePluralNotIDPhp() { + $this->conf->set('translation.mode', 'php'); + new Languages('en', $this->conf); $text = 'sandwich'; $nText = 'sandwiches'; + $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('shaares', t($text, $nText, 0)); + $this->assertEquals('shaare', t($text, $nText, 1)); + $this->assertEquals('shaares', t($text, $nText, 2)); + } + + /** + * Test t() with an invalid language set in the configuration in gettext mode. + */ + public function testTranslateWithInvalidConfLanguageGettext() + { + $this->conf->set('translation.mode', 'gettext'); + $this->conf->set('translation.language', 'nope'); + new Languages('fr', $this->conf); + $text = 'grumble'; + $this->assertEquals($text, t($text)); + } + + /** + * Test t() with an invalid language set in the configuration in PHP mode. + */ + public function testTranslateWithInvalidConfLanguagePhp() + { + $this->conf->set('translation.mode', 'php'); + $this->conf->set('translation.language', 'nope'); + new Languages('fr', $this->conf); + $text = 'grumble'; + $this->assertEquals($text, t($text)); + } + + /** + * Test t() with an invalid language set with auto language in gettext mode. + */ + public function testTranslateWithInvalidAutoLanguageGettext() + { + $this->conf->set('translation.mode', 'gettext'); + new Languages('nope', $this->conf); + $text = 'grumble'; + $this->assertEquals($text, t($text)); + } + + /** + * Test t() with an invalid language set with auto language in PHP mode. + */ + public function testTranslateWithInvalidAutoLanguagePhp() + { + $this->conf->set('translation.mode', 'php'); + new Languages('nope', $this->conf); + $text = 'grumble'; + $this->assertEquals($text, t($text)); + } + + /** + * 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('car', t('car', 'car', 1, 'test')); + $this->assertEquals('Search', 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('car', t('car', 'car', 1, 'test')); + $this->assertEquals('Search', t('Search', 'Search', 1, 'test')); + } } diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 3d1aa653..840eaf21 100644 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php @@ -384,18 +384,18 @@ class UtilsTest extends PHPUnit_Framework_TestCase */ public function testHumanBytes() { - $this->assertEquals('2kiB', human_bytes(2 * 1024)); - $this->assertEquals('2kiB', human_bytes(strval(2 * 1024))); - $this->assertEquals('2MiB', human_bytes(2 * (pow(1024, 2)))); - $this->assertEquals('2MiB', human_bytes(strval(2 * (pow(1024, 2))))); - $this->assertEquals('2GiB', human_bytes(2 * (pow(1024, 3)))); - $this->assertEquals('2GiB', human_bytes(strval(2 * (pow(1024, 3))))); - $this->assertEquals('374B', human_bytes(374)); - $this->assertEquals('374B', human_bytes('374')); - $this->assertEquals('232kiB', human_bytes(237481)); - $this->assertEquals('Unlimited', human_bytes('0')); - $this->assertEquals('Unlimited', human_bytes(0)); - $this->assertEquals('Setting not set', human_bytes('')); + $this->assertEquals('2'. t('kiB'), human_bytes(2 * 1024)); + $this->assertEquals('2'. t('kiB'), human_bytes(strval(2 * 1024))); + $this->assertEquals('2'. t('MiB'), human_bytes(2 * (pow(1024, 2)))); + $this->assertEquals('2'. t('MiB'), human_bytes(strval(2 * (pow(1024, 2))))); + $this->assertEquals('2'. t('GiB'), human_bytes(2 * (pow(1024, 3)))); + $this->assertEquals('2'. t('GiB'), human_bytes(strval(2 * (pow(1024, 3))))); + $this->assertEquals('374'. t('B'), human_bytes(374)); + $this->assertEquals('374'. t('B'), human_bytes('374')); + $this->assertEquals('232'. t('kiB'), human_bytes(237481)); + $this->assertEquals(t('Unlimited'), human_bytes('0')); + $this->assertEquals(t('Unlimited'), human_bytes(0)); + $this->assertEquals(t('Setting not set'), human_bytes('')); } /** @@ -403,9 +403,9 @@ class UtilsTest extends PHPUnit_Framework_TestCase */ public function testGetMaxUploadSize() { - $this->assertEquals('1MiB', get_max_upload_size(2097152, '1024k')); - $this->assertEquals('1MiB', get_max_upload_size('1m', '2m')); - $this->assertEquals('100B', get_max_upload_size(100, 100)); + $this->assertEquals('1'. t('MiB'), get_max_upload_size(2097152, '1024k')); + $this->assertEquals('1'. t('MiB'), get_max_upload_size('1m', '2m')); + $this->assertEquals('100'. t('B'), get_max_upload_size(100, 100)); } /** diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 00000000..d36d73cd --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,6 @@ +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')); + } +} diff --git a/tests/utils/languages/fr/LC_MESSAGES/test.mo b/tests/utils/languages/fr/LC_MESSAGES/test.mo new file mode 100644 index 00000000..416c7831 Binary files /dev/null and b/tests/utils/languages/fr/LC_MESSAGES/test.mo differ diff --git a/tests/utils/languages/fr/LC_MESSAGES/test.po b/tests/utils/languages/fr/LC_MESSAGES/test.po new file mode 100644 index 00000000..89a4fd9b --- /dev/null +++ b/tests/utils/languages/fr/LC_MESSAGES/test.po @@ -0,0 +1,19 @@ +msgid "" +msgstr "" +"Project-Id-Version: Extension test\n" +"POT-Creation-Date: 2017-05-20 13:54+0200\n" +"PO-Revision-Date: 2017-05-20 14:16+0200\n" +"Last-Translator: \n" +"Language-Team: Shaarli\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 2.0.1\n" + +msgid "car" +msgstr "voiture" + +msgid "Search" +msgstr "Fouille" -- cgit v1.2.3 From f39580c6fd171b849cec5832b4912182696341f2 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 25 May 2017 13:26:05 +0200 Subject: Add language selection in the configure page of the default theme --- tests/LanguagesTest.php | 6 ++++-- tests/languages/fr/LanguagesFrTest.php | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/LanguagesTest.php b/tests/LanguagesTest.php index 46bfcd72..864ce630 100644 --- a/tests/LanguagesTest.php +++ b/tests/LanguagesTest.php @@ -183,7 +183,8 @@ class LanguagesTest extends \PHPUnit_Framework_TestCase $this->conf->set('translation.mode', 'gettext'); $this->conf->set('translation.extensions.test', 'tests/utils/languages/'); new Languages('en', $this->conf); - $this->assertEquals('car', t('car', 'car', 1, 'test')); + $txt = 'car'; // ignore me poedit + $this->assertEquals('car', t($txt, $txt, 1, 'test')); $this->assertEquals('Search', t('Search', 'Search', 1, 'test')); } @@ -195,7 +196,8 @@ class LanguagesTest extends \PHPUnit_Framework_TestCase $this->conf->set('translation.mode', 'php'); $this->conf->set('translation.extensions.test', 'tests/utils/languages/'); new Languages('en', $this->conf); - $this->assertEquals('car', t('car', 'car', 1, 'test')); + $txt = 'car'; // ignore me poedit + $this->assertEquals('car', t($txt, $txt, 1, 'test')); $this->assertEquals('Search', t('Search', 'Search', 1, 'test')); } } diff --git a/tests/languages/fr/LanguagesFrTest.php b/tests/languages/fr/LanguagesFrTest.php index c05a0f98..79d05172 100644 --- a/tests/languages/fr/LanguagesFrTest.php +++ b/tests/languages/fr/LanguagesFrTest.php @@ -155,7 +155,8 @@ class LanguagesFrTest extends \PHPUnit_Framework_TestCase $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')); + $txt = 'car'; // ignore me poedit + $this->assertEquals('voiture', t($txt, $txt, 1, 'test')); $this->assertEquals('Fouille', t('Search', 'Search', 1, 'test')); } @@ -167,7 +168,8 @@ class LanguagesFrTest extends \PHPUnit_Framework_TestCase $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')); + $txt = 'car'; // ignore me poedit + $this->assertEquals('voiture', t($txt, $txt, 1, 'test')); $this->assertEquals('Fouille', t('Search', 'Search', 1, 'test')); } } -- cgit v1.2.3