From 9c9408f742b3f25df51e51dc6606659b4dd7f202 Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Wed, 12 Jan 2011 13:09:52 +0100 Subject: [PATCH] Thanks to no LSB, we need to keep seperate handlers for each domain. --- framework/Translation/lib/Horde/Translation.php | 23 +++++++++++---------- .../test/Horde/Translation/WrapperTest.php | 24 +++++++++++++++++++--- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/framework/Translation/lib/Horde/Translation.php b/framework/Translation/lib/Horde/Translation.php index d53ce9322..eda8a6dc5 100644 --- a/framework/Translation/lib/Horde/Translation.php +++ b/framework/Translation/lib/Horde/Translation.php @@ -36,11 +36,11 @@ abstract class Horde_Translation static protected $_directory; /** - * The handler providing the actual translations. + * The handlers providing the actual translations. * - * @var Horde_Translation_Handler + * @var array */ - static protected $_handler; + static protected $_handlers = array(); /** * Loads a translation handler class pointing to the library's translations @@ -54,24 +54,25 @@ abstract class Horde_Translation if (!self::$_domain || !self::$_directory) { throw new Horde_Translation_Exception('The domain and directory properties must be set by the class that extends Horde_Translation.'); } - self::setHandler(new $handlerClass(self::$_domain, self::$_directory)); + self::setHandler(self::$_domain, new $handlerClass(self::$_domain, self::$_directory)); } /** - * Assigns a translation handler object to $_handler. + * Assigns a translation handler object to $_handlers. * * Type hinting isn't used on purpose. You should extend a custom * translation handler passed here from the Horde_Translation interface, * but technically it's sufficient if you provide the API of that * interface. * + * @param string $domain The translation domain. * @param Horde_Translation_Handler $handler An object implementing the * Horde_Translation_Handler * interface. */ - static public function setHandler($handler) + static public function setHandler($domain, $handler) { - self::$_handler = $handler; + self::$_handlers[$domain] = $handler; } /** @@ -84,10 +85,10 @@ abstract class Horde_Translation */ static public function t($message) { - if (!self::$_handler) { + if (!isset(self::$_handlers[self::$_domain])) { self::loadHandler('Horde_Translation_Handler_Gettext'); } - return self::$_handler->t($message); + return self::$_handlers[self::$_domain]->t($message); } /** @@ -102,9 +103,9 @@ abstract class Horde_Translation */ static public function ngettext($singular, $plural, $number) { - if (!self::$_handler) { + if (!isset(self::$_handlers[self::$_domain])) { self::loadHandler('Horde_Translation_Handler_Gettext'); } - return self::$_handler->ngettext($singular, $plural, $number); + return self::$_handlers[self::$_domain]->ngettext($singular, $plural, $number); } } diff --git a/framework/Translation/test/Horde/Translation/WrapperTest.php b/framework/Translation/test/Horde/Translation/WrapperTest.php index 9a9e79f39..a350fb706 100644 --- a/framework/Translation/test/Horde/Translation/WrapperTest.php +++ b/framework/Translation/test/Horde/Translation/WrapperTest.php @@ -13,12 +13,13 @@ class Horde_Translation_WrapperTest extends Horde_Translation_TestBase { public function testWrappers() { - $this->assertEquals('1 Woche', sprintf(Horde_Translation_TestWrapper::ngettext('%d week', '%d weeks', 1), 1)); - $this->assertEquals('Heute', Horde_Translation_TestWrapper::t('Today')); + $this->assertEquals('Heute', Horde_Translation_TestWrapperA::t('Today')); + $this->assertEquals('1 Woche', sprintf(Horde_Translation_TestWrapperA::ngettext('%d week', '%d weeks', 1), 1)); + $this->assertEquals('Morgen', Horde_Translation_TestWrapperB::t('Tomorrow')); } } -class Horde_Translation_TestWrapper extends Horde_Translation +class Horde_Translation_TestWrapperA extends Horde_Translation { static public function t($message) { @@ -34,3 +35,20 @@ class Horde_Translation_TestWrapper extends Horde_Translation return parent::ngettext($singular, $plural, $number); } } + +class Horde_Translation_TestWrapperB extends Horde_Translation +{ + static public function t($message) + { + self::$_domain = 'Horde_Other'; + self::$_directory = dirname(__FILE__) . '/locale'; + return parent::t($message); + } + + static public function ngettext($singular, $plural, $number) + { + self::$_domain = 'Horde_Other'; + self::$_directory = dirname(__FILE__) . '/locale'; + return parent::ngettext($singular, $plural, $number); + } +} -- 2.11.0