我正在使用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()
方法似乎浪费资源,所以我可以自动找到字符串。
我想听听你们认为在这种情况下我应该做些什么。谢谢!
答案 0 :(得分:1)
我很确定正确的方法是抛出一个应该在视图上下文中翻译的错误代码。
我同意你的意见,这将是一个ressource,但另一方面它会使应用程序更可靠和模块化,这是使用这种方法的唯一建议,不是吗?
答案 1 :(得分:1)
始终抛出错误消息。如果有人确实需要翻译错误消息,那么他们可以自己完成。 Exception
的主要语言应该始终是英语。
然后,如果有人需要翻译Exception
他们可以从视图脚本中翻译:
echo $this->translate($e->getMessage());