gpt4 book ai didi

zend-framework2 - ZF2 转换器在 Controller 中不起作用?

转载 作者:行者123 更新时间:2023-12-04 18:36:54 26 4
gpt4 key购买 nike

我正在尝试通过 ServiceLocator 在 Controller 中进行翻译,但这不是翻译,我在 stackoverflow 中尝试了很多 sulotions 但都没有成功。我的系统使用多种语言,我的目标是在 View 、 Controller 、表单和过滤器中使用转换器。在我看来,翻译器正在发挥作用。任何建议和帮助将不胜感激。

不在 Controller 中工作:

$this->getServiceLocator()->get('translator')->translate('my text',$myLocale);

我的应用程序 mudole.config.php:
'service_manager' => array(
'abstract_factories' => array(
'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
'Zend\Log\LoggerAbstractServiceFactory',
),
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'translator' => array(
'locale' => 'en_US',// 'locale' => 'dk_DK',
'translation_file_patterns' => array(
array(

'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),

我将 mudole.config.php 中的本地更改为另一种语言,但仍未翻译。

最佳答案

查看助手/表格

ZF2 附带 View 助手 Zend\I18n\View\Helper\Translate ;这就是为什么您已经可以使用该方法 $this->translate($text)在 View 中。

然而,所有从 Zend\I18n\View\Helper\AbstractTranslatorHelper 扩展的 View 助手类(包括所有表单 View 助手)也具有“翻译能力”。

您需要使用 $viewHelper->setTranslator($translator) 传入翻译器。并通过 $viewHelper->setTranslatorEnabled(true) 启用翻译.

Controller 插件

不幸的是,没有默认插件(我能找到)来处理 Controller 中的翻译器;我想你可能会争辩说文本内容无论如何都不应该出现在 Controller 中。

您可以轻松创建一个如下面的示例。关键是通过你的新translator通过工厂服务作为依赖项。

namespace MyModule\Controller\Plugin;

use Zend\Mvc\Controller\AbstractPlugin;
use Zend\I18n\Translator\Translator as TranslatorService;

class Translator extends AbstractPlugin
{
protected $translatorService;

public function __construct(TranslatorService $translatorService)
{
$this->translatorService = $translatorService;
}

public function invoke($text = null, array $options = [])
{
if (null == $text) {
return $this;
}
return $this->translate($text, $options);
}

public function translate($text, array $options = [])
{
return $this->translatorService->translate($text);
}

}

并创建工厂类。
namespace MyModule\Controller\Plugin;

use MyModule\Controller\Plugin\Translator;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\FactoryInterface;

class TranslatorFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $controllerPluginManager)
{
$serviceManager = $controllerPluginManager->getServiceLocator();

return new Translator($serviceManager->get('translator'));
}
}

module.config.php注册服务.
return [
'controller_plugins' => [
'factories' => [
'translate' => 'MyModule\\Controller\\Plugin\\TranslateFactory',
]
],
];

然后你可以在 Controller 类中调用它。
// Directly
$this->translate($text, $options);

// Or fetch the plugin first
$this->translate()->translate($text, $options);

关于zend-framework2 - ZF2 转换器在 Controller 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com