/library/Unodor/Translate/Adapter.php
https://github.com/besters/My-Base · PHP · 131 lines · 92 code · 19 blank · 20 comment · 30 complexity · 145c09ac6ec2450665bad9e654bf3b45 MD5 · raw file
- <?php
- abstract class Unodor_Translate_Adapter extends Zend_Translate_Adapter {
- /**
- * Translates the given string
- * returns the translation
- *
- * @see Zend_Locale
- * @param string|array $messageId Translation string, or Array for plural translations
- * @param string|Zend_Locale $locale (optional) Locale/Language to use, identical with
- * locale identifier, @see Zend_Locale for more information
- * @return string
- */
- public function translate($messageId, $locale = null)
- {
- if ($locale === null) {
- $locale = $this->_options['locale'];
- }
- $plural = null;
- if (is_array($messageId)) {
- if (count($messageId) > 2) {
- $number = array_pop($messageId);
- if (!is_numeric($number)) {
- $plocale = $number;
- $number = array_pop($messageId);
- } else {
- $plocale = 'en';
- }
- $plural = $messageId;
- $messageId = $messageId[0];
- } else {
- $messageId = $messageId[0];
- }
- }
- if (!Zend_Locale::isLocale($locale, true, false)) {
- if (!Zend_Locale::isLocale($locale, false, false)) {
- // language does not exist, return original string
- $this->_log($messageId, $locale);
- if ($plural === null) {
- return $messageId;
- }
- $rule = Zend_Translate_Plural::getPlural($number, $plocale);
- if (!isset($plural[$rule])) {
- $rule = 0;
- }
- return $plural[$rule];
- }
- $locale = new Zend_Locale($locale);
- }
- $locale = (string) $locale;
- if ((is_string($messageId) || is_int($messageId)) && isset($this->_translate[$locale][$messageId])) {
- // return original translation
- if ($plural === null) {
- return $this->_translate[$locale][$messageId];
- }
- $rule = Zend_Translate_Plural::getPlural($number, $locale);
- if (isset($this->_translate[$locale][$plural[0]][$rule])) {
- return $this->_translate[$locale][$plural[0]][$rule];
- }
- } else if (strlen($locale) != 2) {
- // faster than creating a new locale and separate the leading part
- $locale = substr($locale, 0, -strlen(strrchr($locale, '_')));
- if ((is_string($messageId) || is_int($messageId)) && isset($this->_translate[$locale][$messageId])) {
- // return regionless translation (en_US -> en)
- if ($plural === null) {
- return $this->_translate[$locale][$messageId];
- }
- $rule = Zend_Translate_Plural::getPlural($number, $locale);
- if (isset($this->_translate[$locale][$plural[0]][$rule])) {
- return $this->_translate[$locale][$plural[0]][$rule];
- }
- }
- }
- if(isset($plural)){
- $messageId = $plural;
- }
- $this->_log($messageId, $locale);
- if ($plural === null) {
- return $messageId;
- }
- $rule = Zend_Translate_Plural::getPlural($number, $plocale);
- if (!isset($plural[$rule])) {
- $rule = 0;
- }
- return $plural[$rule];
- }
- /**
- * Logs a message when the log option is set
- *
- * @param string $message Message to log
- * @param String $locale Locale to log
- */
- protected function _log($message, $locale) {
- if ($this->_options['logUntranslated']) {
- $string = '';
- if(is_array($message)){
- foreach($message as $str){
- $string .= '"'.$str.'", ';
- }
- $string .= 1;
- $message = str_replace('%message%', $string, 'n'.$this->_options['logMessage']);
- }else{
- $message = str_replace('%message%', '"'.$message.'"', $this->_options['logMessage']);
- }
- $message = str_replace('%locale%', $locale, $message);
-
- if ($this->_options['log']) {
- $this->_options['log']->notice($message);
- } else {
- trigger_error($message, E_USER_NOTICE);
- }
- }
- }
- }