我在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的语言
答案 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。