2010-09-15 2 views
1

С Zend Framework это легко to log strings that haven't got a translation.Переводимые строки при использовании Zend_Translate

Мой вопрос: как вы регистрируете строки, которые имеют перевод?

Спасибо!

+1

Вы, возможно, потребуются расширить класс, используемый для перевода, вызовите 'parent' метод, а затем войти ваш успешный перевод. –

ответ

0

Нет возможности записывать вызовы translate() в Zend_Translate, но вы можете создать своего собственного помощника, который будет проксифицировать все вызовы к оригинальному помощнику translate() и использовать его для ваших нужд.

Вот несколько примеров из вспомогательного метода:

/** 
* Translates provided message Id 
* 
* You can give multiple params or an array of params. 
* If you want to output another locale just set it as last single parameter 
* Example 1: translate('%1\$s + %2\$s', $value1, $value2, $locale); 
* Example 2: translate('%1\$s + %2\$s', array($value1, $value2), $locale); 
* 
* @param string $messageid Id of the message to be translated 
* @return string Translated message 
*/ 
public function t_($messageid = null) 
{ 
    /** 
    * Process the arguments 
    */ 
    $options = func_get_args(); 

    array_shift($options); 

    $count = count($options); 
    $locale = null; 
    if ($count > 0) { 
     if (Zend_Locale::isLocale($options[($count - 1)], null, false) !== false) { 
      $locale = array_pop($options); 
     } 
    } 

    if ((count($options) === 1) and (is_array($options[0]) === true)) { 
     $options = $options[0]; 
    } 

/** 
* Get Zend_Translate_Adapter 
*/ 
    $translator = $this->translate()  // get Zend_View_Helper_Translate 
       ->getTranslator(); // Get Zend_Translate_Adapter 

    /** 
    * Proxify the call to Zend_Translate_Adapter 
    */ 
    $message = $translator->translate($messageid, $locale); 

    /** 
    * If no any options provided then just return message 
    */ 
    if ($count === 0) { 
     return $message; 
    } 

    /** 
    * Apply options in case we have them 
    */ 
    return vsprintf($message, $options); 
} 

и использовать его как:

echo $this->t_('message-id', $param1, $param2); 

вместо

echo $this->translate('message-id', $param1, $param2); 

Затем вы можете добавить любые пользовательские функциональные возможности этого метода для регистрации необходимой информации.

Это решение не очень быстро, но позволяет сделать трюк.

Я создал этот метод при попытке обойти эту проблему:

http://framework.zend.com/issues/browse/ZF-5547

Смежные вопросы