在CommandController中设置TYPO3 StandaloneView的语言

时间:2015-01-18 12:55:52

标签: php typo3 fluid typo3-6.2.x

我在CommandController中使用TYPO3 \ CMS \ Fluid \ View \ StandaloneView向我的fe_user发送电子邮件。

构建模板的部分如下所示:

    /* @var \TYPO3\CMS\Fluid\View\StandaloneView $emailView */
    $emailView = $this->objectManager->get( 'TYPO3\\CMS\\Fluid\\View\\StandaloneView' );

    // pass extension name to standaloneView for translations
    $extensionName = $this->request->getControllerExtensionName();
    $emailView->getRequest()->setControllerExtensionName( $extensionName );

    $extensionPath           = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath( 'my_extension' );
    $templatePathAndFilename = $extensionPath . 'Resources/Private/Templates/Email/' . $templateFile . '.html';
    $emailView->setLayoutRootPath( $extensionPath . 'Resources/Private/Layouts/Email/' );
    //$emailView->setPartialRootPath($ressourcePath . 'Partials/');

    $emailView->setTemplatePathAndFilename( $templatePathAndFilename );

    return $emailView->render();

我认为没什么特别的。

在html-Template中我正在使用正常的翻译ViewHelper of Fluid:

<f:translate key="LLL:EXT:my_extension/Resources/Private/Language/locallang.xlf:mail.text" />

这一切都适用于标准语言,但我不知道如何告诉View / CommandController 使用哪种语言

我不太确定这是StandaloneView还是CommandController问题......

修改

从CommandController(调度程序)调用已发布的代码段 - 因此没有当前的前端用户(我们处于后端环境中)。我从存储库中获取用户,因此我将所选语言保存在那里。但是我要设置StandaloneView的语言

3 个答案:

答案 0 :(得分:3)

通常,您可以通过执行以下操作在CommandController中设置语言:

$GLOBALS['BE_USER']->uc['lang'] = 'de';

问题是LocalizationUtility在扩展名为:: translate()之后为扩展创建了一个缓存。没有可用的功能来重置该缓存,但您可以在扩展中添加这个小实用程序功能,以便您可以这样做:

namespace Vendor\Extension\Utility;

class LocalizationUtility extends \TYPO3\CMS\Extbase\Utility\LocalizationUtility
{
   public static function resetExtensionLangCache($extensionName){
       unset(static::$LOCAL_LANG[$extensionName]);
   }
}

如果您需要在CommandController中切换完整语言上下文,现在可以在切换BE_USER的语言后立即调用此方法:

\Vendor\Extension\Utility\LocalizationUtility::resetExtensionLangCache('<extensionname>');

这将重置缓存,LocalizationUtility必须初始化其扩展条目,直到您再次切换并再次调用它。

答案 1 :(得分:1)

要从后端上下文控制Fluid StandaloneView中使用的语言,只需设置如下所示的语言(我将语言设置为德语)。

$GLOBALS['BE_USER']->uc['lang'] = 'de';

应在调用$emailView->render()方法之前设置此项。

答案 2 :(得分:0)

我假设您要使用当前用户使用的语言发送电子邮件,在这种情况下,您应该为其他语言创建语言配置,例如described in TYPO3 docs

如果配置正确且使用非默认语言,您的所有视图(也是这些独立视图)都将转换为当前语言。

AFAUK,没有办法强迫翻译VH使用某种语言,即。通过给它的uid。