在 CommandController 中设置 TYPO3 StandaloneView 的语言


Set language of TYPO3 StandaloneView in CommandController

我在命令控制器中使用TYPO3''CMS''Fluid''View''StandaloneView向我的fe_user发送电子邮件。

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

    /* @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模板中,我使用的是Fluid的普通翻译ViewHelper:

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

这一切都在标准语言中运行良好,但我不知道如何告诉视图/命令控制器使用哪种语言

我不太确定这是独立视图还是命令控制器问题......

编辑:

发布的代码段是从命令控制器(调度程序)调用的 - 因此没有当前前端用户(我们在后端环境中)。我从存储库中获取用户,因此我必须将所选语言保存在其中。但是我必须为独立视图设置语言

通常,

您可以通过执行以下操作在命令控制器中设置语言:

$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]);
   }
}

如果您遇到必须在命令控制器中切换完整语言上下文的情况,您现在可以在切换BE_USER的语言后立即调用它:

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

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

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

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

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

我假设您想用用户当前使用的语言发送电子邮件,在这种情况下,您应该为其他语言创建语言配置,如 TYPO3 文档中所述。

如果配置正确并使用非默认语言,则所有视图(包括这些独立视图)都将转换为当前语言。

AFAUK,没有办法强制翻译VH使用某些语言,即通过给出它的UID。