2015-01-18 2 views
0

CommandController에서 TYPO3 \ CMS \ Fluid \ View \ StandaloneView를 사용하여 전자 메일을 fe_user에 보내고 있습니다.CommandController에서 TYPO3 StandaloneView의 언어 설정

템플릿을 구축 메신저는 다음과 같다 부분 : 내가 생각하는 특별한

/* @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(); 

아무것도. 내가 유체의 ViewHelper 번역 정상을 사용하고는 HTML - 템플릿에서

:

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

이 모두 표준 언어에서 잘 작동하지만, 내가보기/커맨드 컨트롤러를 알 수있는 방법 아무 생각도 없어 어떤 언어를 사용할지 . 나는 이것이 StandaloneView 또는 커맨드 컨트롤러에 문제가있는 경우 아주 확실하지 않다

...

편집 : 게시 된 조각은 커맨드 컨트롤러 (스케줄러)에서 호출

- 그래서이 없음 현재 프론트 엔드 사용자 (우리는 백엔드 환경에있다). 선택한 언어를 저곳에 저장하도록 저장소에서 사용자를 얻습니다. 하지만 StandaloneView의 언어를 설정해야합니다.

답변

0

사용자가 현재 사용하는 언어로 전자 메일을 보내려는 경우, 추가 언어에 대한 언어 구성 (예 : described in TYPO3 docs)을 만들어야한다고 가정합니다.

제대로 설정되고 기본 언어가 아닌 언어가 사용되면 모든보기 (이 독립형)가 현재 언어로 번역됩니다.

AFAUK, 강제로 VH에서 일부 언어를 사용하도록 번역 할 수는 없습니다. 그것에게 uid를줌으로써.

+0

CommandController/Scheduler를 사용하므로 _current_ 사용자가 없습니다. TYPO3에는 fe_users 언어가 선택되어 있지 않으므로 직접 저장해야합니다. –

+0

같은 문제가 있습니다. BE로부터 이메일을 보내고 Fluid 사용하기. 일부 FE 레코드 언어를 기반으로 메일을 번역하는 데 어려움이 있습니다. VH를 특정 언어로 강제 변환하는 방법은 훌륭합니다. – fnagel

1

Fluid StandaloneView에서 사용되는 언어를 백엔드 컨텍스트에서 제어하려면 다음과 같이 언어를 설정하십시오 (언어를 german으로 설정). 당신이 $emailView->render() 메서드를 호출하기 전에

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

을 설정해야합니다.

+0

이것은'$ view-> getRequest() -> setControllerExtensionName()'을 사용하여 확장자 이름을 설정하고'f : translate' 호출에서 키를 사용할 때만 작동한다는 점에 유의하십시오. 전체 파일), 그렇지 않으면 여전히 기본 언어 레이블이 표시됩니다. – pduersteler

+0

... 하나의 이메일을 보내는 경우에만 작동합니다. 각자의 언어가있는 이메일을 여러 개 보내 자마자 제대로 작동하지 않습니다. – pduersteler

0

일반적으로이 작업을 수행하여 커맨드 컨트롤러 언어를 설정할 수 있습니다

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

문제는이에 :: 번역() 뭔가 한 번 호출 된 것 후 LocalizationUtility 확장자에 대한 캐시를 생성하는 것입니다. 이 캐쉬를 재설정하기 위해 사용 가능한 기능은 없지만, 당신은 단지 그렇게 할 수 있도록 확장이 작은 유틸리티 기능을 추가 할 수 있습니다

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는 전환 할 때까지 사용자의 내선에서 해당 항목을 초기화하고 다시 전화를해야합니다.