~clinton-collins/familyproject/trunk

« back to all changes in this revision

Viewing changes to ZendFramework/library/Zend/View/Helper/Translate.php

  • Committer: Clinton Collins
  • Date: 2009-06-26 19:54:58 UTC
  • Revision ID: clinton.collins@gmail.com-20090626195458-5ebba0qcvo15xlpy
Initial Import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * Zend Framework
 
4
 *
 
5
 * LICENSE
 
6
 *
 
7
 * This source file is subject to the new BSD license that is bundled
 
8
 * with this package in the file LICENSE.txt.
 
9
 * It is also available through the world-wide-web at this URL:
 
10
 * http://framework.zend.com/license/new-bsd
 
11
 * If you did not receive a copy of the license and are unable to
 
12
 * obtain it through the world-wide-web, please send an email
 
13
 * to license@zend.com so we can send you a copy immediately.
 
14
 *
 
15
 * @category   Zend
 
16
 * @package    Zend_View
 
17
 * @subpackage Helper
 
18
 * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
 
19
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 
20
 * @version    $Id: Translate.php 15766 2009-05-25 20:09:35Z thomas $
 
21
 */
 
22
 
 
23
/** Zend_Locale */
 
24
require_once 'Zend/Locale.php';
 
25
 
 
26
/** Zend_View_Helper_Abstract.php */
 
27
require_once 'Zend/View/Helper/Abstract.php';
 
28
 
 
29
/**
 
30
 * Translation view helper
 
31
 *
 
32
 * @category  Zend
 
33
 * @package   Zend_View
 
34
 * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
 
35
 * @license   http://framework.zend.com/license/new-bsd     New BSD License
 
36
 */
 
37
class Zend_View_Helper_Translate extends Zend_View_Helper_Abstract
 
38
{
 
39
    /**
 
40
     * Translation object
 
41
     *
 
42
     * @var Zend_Translate_Adapter
 
43
     */
 
44
    protected $_translator;
 
45
 
 
46
    /**
 
47
     * Constructor for manually handling
 
48
     *
 
49
     * @param Zend_Translate|Zend_Translate_Adapter $translate Instance of Zend_Translate
 
50
     */
 
51
    public function __construct($translate = null)
 
52
    {
 
53
        if (empty($translate) === false) {
 
54
            $this->setTranslator($translate);
 
55
        }
 
56
    }
 
57
 
 
58
    /**
 
59
     * Translate a message
 
60
     * You can give multiple params or an array of params.
 
61
     * If you want to output another locale just set it as last single parameter
 
62
     * Example 1: translate('%1\$s + %2\$s', $value1, $value2, $locale);
 
63
     * Example 2: translate('%1\$s + %2\$s', array($value1, $value2), $locale);
 
64
     *
 
65
     * @param  string $messageid Id of the message to be translated
 
66
     * @return string Translated message
 
67
     */
 
68
    public function translate($messageid = null)
 
69
    {
 
70
        if ($messageid === null) {
 
71
            return $this;
 
72
        }
 
73
 
 
74
        $translate = $this->getTranslator();
 
75
        if ($translate === null) {
 
76
            return $messageid;
 
77
        }
 
78
 
 
79
        $options = func_get_args();
 
80
        array_shift($options);
 
81
 
 
82
        $count  = count($options);
 
83
        $locale = null;
 
84
        if ($count > 0) {
 
85
            if (Zend_Locale::isLocale($options[($count - 1)], null, false) !== false) {
 
86
                $locale = array_pop($options);
 
87
            }
 
88
        }
 
89
 
 
90
        if ((count($options) === 1) and (is_array($options[0]) === true)) {
 
91
            $options = $options[0];
 
92
        }
 
93
 
 
94
        $message = $translate->translate($messageid, $locale);
 
95
        if (count($options) === 0) {
 
96
            return $message;
 
97
        }
 
98
 
 
99
        return vsprintf($message, $options);
 
100
    }
 
101
 
 
102
    /**
 
103
     * Sets a translation Adapter for translation
 
104
     *
 
105
     * @param  Zend_Translate|Zend_Translate_Adapter $translate Instance of Zend_Translate
 
106
     * @throws Zend_View_Exception When no or a false instance was set
 
107
     * @return Zend_View_Helper_Translate
 
108
     */
 
109
    public function setTranslator($translate)
 
110
    {
 
111
        if ($translate instanceof Zend_Translate_Adapter) {
 
112
            $this->_translator = $translate;
 
113
        } else if ($translate instanceof Zend_Translate) {
 
114
            $this->_translator = $translate->getAdapter();
 
115
        } else {
 
116
            require_once 'Zend/View/Exception.php';
 
117
            throw new Zend_View_Exception('You must set an instance of Zend_Translate or Zend_Translate_Adapter');
 
118
        }
 
119
 
 
120
        return $this;
 
121
    }
 
122
 
 
123
    /**
 
124
     * Retrieve translation object
 
125
     *
 
126
     * If none is currently registered, attempts to pull it from the registry
 
127
     * using the key 'Zend_Translate'.
 
128
     *
 
129
     * @return Zend_Translate_Adapter|null
 
130
     */
 
131
    public function getTranslator()
 
132
    {
 
133
        if ($this->_translator === null) {
 
134
            require_once 'Zend/Registry.php';
 
135
            if (Zend_Registry::isRegistered('Zend_Translate') === true) {
 
136
                $this->setTranslator(Zend_Registry::get('Zend_Translate'));
 
137
            }
 
138
        }
 
139
 
 
140
        return $this->_translator;
 
141
    }
 
142
 
 
143
    /**
 
144
     * Set's an new locale for all further translations
 
145
     *
 
146
     * @param  string|Zend_Locale $locale New locale to set
 
147
     * @throws Zend_View_Exception When no Zend_Translate instance was set
 
148
     * @return Zend_View_Helper_Translate
 
149
     */
 
150
    public function setLocale($locale = null)
 
151
    {
 
152
        $translate = $this->getTranslator();
 
153
        if ($translate === null) {
 
154
            require_once 'Zend/View/Exception.php';
 
155
            throw new Zend_View_Exception('You must set an instance of Zend_Translate or Zend_Translate_Adapter');
 
156
        }
 
157
 
 
158
        $translate->setLocale($locale);
 
159
        return $this;
 
160
    }
 
161
 
 
162
    /**
 
163
     * Returns the set locale for translations
 
164
     *
 
165
     * @throws Zend_View_Exception When no Zend_Translate instance was set
 
166
     * @return string|Zend_Locale
 
167
     */
 
168
    public function getLocale()
 
169
    {
 
170
        $translate = $this->getTranslator();
 
171
        if ($translate === null) {
 
172
            require_once 'Zend/View/Exception.php';
 
173
            throw new Zend_View_Exception('You must set an instance of Zend_Translate or Zend_Translate_Adapter');
 
174
        }
 
175
 
 
176
        return $translate->getLocale();
 
177
    }
 
178
}