0

我正在使用 Zend Framework 2,但这个问题并不是 ZF2 特定的。

我有一种情况,我可以方便地在我的控制器中而不是在我的视图脚本中翻译字符串。一般我是在视图脚本中翻译,但在少数场景下,不是那么方便。我觉得这绝对不是管制员的工作,但我想听听对此的意见和建议。

为了说明我的意思,这是一个方便的场景:

public function registerAction() {
    try {
        $service_layer->registerUser(...);
    }

    catch (\My\Specific\Exception $e) {
        $error = $this->translate('Something specific went wrong');
    }

    catch (\Exception $e) {
        $error = $this->translate('Unfortunately, an error occurred!');
    }

    return array('error' => $error); // Pass error to view
}

我知道如何在控制器中进行翻译,所以不用担心。这里我使用了一个服务层,它可能会抛出异常。我想抓住这些,以便向用户提供有用的错误消息。因为可能会发生几个不同的错误,所以我不能简单地向视图发送一个布尔值来指示是否发生了错误,因为那样我就无法区分发生了哪个错误。

所以,我可以翻译控制器中的字符串并在我的视图脚本中打印出变量。当我使用 poedit 查找翻译字符串时,这将使事情变得容易。或者,我可以只返回未翻译的字符串并$this->translate($error);在视图脚本中执行。使用这种方法,我在检测控制器中的翻译字符串时遇到了问题。仅仅为了这个目的使用 PHP 的gettext()方法似乎是一种资源的浪费,只是为了让我可以自动找到字符串。

我想听听你们认为我在这种情况下应该怎么做。谢谢!

4

2 回答 2

1

总是抛出错误信息。如果有人真的需要翻译错误消息,那么他们可以自己完成。虽然 s的主要语言Exception应该始终是英语。

然后,如果有人需要翻译,Exception他们可以从视图脚本中进行:

echo $this->translate($e->getMessage());
于 2013-02-07T07:50:15.393 回答
1

我很确定正确的方法是让异常抛出一个应该在视图上下文中翻译的错误代码。

我同意你的观点,这将是一种资源浪费,但另一方面它会使应用程序更加可靠和模块化,这是使用这种方法的唯一建议,不是吗?

于 2013-02-07T02:21:54.237 回答