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
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;
}
/**
*/
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);
}
/**
*/
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);
}
}
{
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)
{
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);
+ }
+}