Overview

Packages

  • Translation

Classes

  • Horde_Translation
  • Horde_Translation_Handler_Gettext

Interfaces

  • Horde_Translation_Handler

Exceptions

  • Horde_Translation_Exception
  • Overview
  • Package
  • Class
  • Tree
 1: <?php
 2: /**
 3:  * @package Translation
 4:  *
 5:  * Copyright 2010-2012 Horde LLC (http://www.horde.org/)
 6:  *
 7:  * See the enclosed file COPYING for license information (LGPL). If you
 8:  * did not receive this file, see http://www.horde.org/licenses/lgpl21.
 9:  */
10: 
11: /**
12:  * The Horde_Translation_Handler_Gettext provides translations through the
13:  * gettext extension, but fails gracefully if gettext is not installed.
14:  *
15:  * @author  Jan Schneider <jan@horde.org>
16:  * @package Translation
17:  */
18: class Horde_Translation_Handler_Gettext implements Horde_Translation_Handler
19: {
20:     /**
21:      * The translation domain, e.g. package name.
22:      *
23:      * @var string
24:      */
25:     protected $_domain;
26: 
27:     /**
28:      * Whether the gettext extension is installed.
29:      *
30:      * @var boolean
31:      */
32:     protected $_gettext;
33: 
34:     /**
35:      * Constructor.
36:      *
37:      * @param string $domain  The translation domain, e.g. package name.
38:      * @param string $path    The path to the gettext catalog.
39:      */
40:     public function __construct($domain, $path)
41:     {
42:         if (!is_dir($path)) {
43:             throw new InvalidArgumentException("$path is not a directory");
44:         }
45:         $this->_gettext = function_exists('_');
46:         if (!$this->_gettext) {
47:             return;
48:         }
49:         $this->_domain = $domain;
50:         bindtextdomain($this->_domain, $path);
51:     }
52: 
53:     /**
54:      * Returns the translation of a message.
55:      *
56:      * @param string $message  The string to translate.
57:      *
58:      * @return string  The string translation, or the original string if no
59:      *                 translation exists.
60:      */
61:     public function t($message)
62:     {
63:         return $this->_gettext ? dgettext($this->_domain, $message) : $message;
64:     }
65: 
66:     /**
67:      * Returns the plural translation of a message.
68:      *
69:      * @param string $singular  The singular version to translate.
70:      * @param string $plural    The plural version to translate.
71:      * @param integer $number   The number that determines singular vs. plural.
72:      *
73:      * @return string  The string translation, or the original string if no
74:      *                 translation exists.
75:      */
76:     public function ngettext($singular, $plural, $number)
77:     {
78:         return $this->_gettext
79:           ? dngettext($this->_domain, $singular, $plural, $number)
80:           : ($number > 1 ? $plural : $singular);
81:     }
82: }
83: 
API documentation generated by ApiGen