开发者

Log translated strings when using Zend_Translate

With Zend Framework it's easy to log strings that h开发者_开发百科aven't got a translation.

My question: how do you log the strings that do have a translation?

Thanks!!


There is no ability to log translate() calls in Zend_Translate but you can create your own helper that will proxify all calls to original translate() helper and use it for your needs.

Here is some example of helper method:

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

and use it like:

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

instead of

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

Then you can add any custom functionality to that method to log information you need.

This solution is not very fast but allows you to do the trick.

I've created this method while trying to workaround this issue:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜