使用 Zend_Translate 时记录翻译的字符串

发布于 2024-09-18 20:42:19 字数 197 浏览 17 评论 0原文

使用 Zend Framework,可以轻松记录尚未翻译的字符串< /a>.

我的问题:如何记录有翻译的字符串?

谢谢!!

With Zend Framework it's easy to log strings that haven't got a translation.

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

Thanks!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彩扇题诗 2024-09-25 20:42:27

Zend_Translate 中无法记录 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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文