12

TYPO3Fluidテンプレートで現在の言語キー(またはコード)を取得することは可能ですか?

それまでの間、ここにあるビューヘルパーを使用して別の解決策を見つけました:

<?php
class Tx_AboUnitReservation_ViewHelpers_LanguageViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {

    /**
     * Get the current language
     */
    protected function getLanguage() {
        if (TYPO3_MODE === 'FE') {
            if (isset($GLOBALS['TSFE']->config['config']['language'])) {
                return $GLOBALS['TSFE']->config['config']['language'];
            }
        } elseif (strlen($GLOBALS['BE_USER']->uc['lang']) > 0) {
            return $GLOBALS['BE_USER']->uc['lang'];
        }
        return 'en'; //default
    }

    /**
     * Return current language
     * @return  string
     */
    public function render() {
        return $this->getLanguage();
    }

}

?>

これを流体テンプレートで次のように使用します。

<f:alias map="{isGerman: 'de'}">
    <f:if condition="{aboUnitReservation:language()} == {isGerman}">
        <script type="text/javascript" src="{f:uri.resource(path:'js/jquery.ui.datepicker-de-CH.js')}"></script>
    </f:if>
</f:alias>
4

6 に答える 6

14

FluidテンプレートでTypoScriptオブジェクトを使用する別のソリューション:

# German language
temp.language = TEXT
temp.language.value = at

# English language
[globalVar = GP:L = 1]
  temp.language.value = en
[global]

lib.language < temp.language

そしてFluidコード:

<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.language')} == 'at'">
    <f:then>
        ...
    </f:then>
    <f:else>
        ...
    </f:else>
</f:if>

もちろん、オブジェクトtemp.languageには任意の値を含めることができます。

于 2016-01-12T13:44:32.930 に答える
13

アクションに変数を割り当てることができます。

$this->view->assign("sysLanguageUid", $GLOBALS['TSFE']->sys_language_uid);

そして、あなたの見解でそれを読んでください:

<f:if condition="{sysLanguageUid} == 0">
    You're reading English version of page
</f:if>

一方<f:if ...>、ブロックは非常に単純で、時には不快な場合もあるため、コントローラーで使用する変数を割り当てる方が簡単で快適です。

switch ($GLOBALS['TSFE']->sys_language_uid) {
    case 1:
        $msg = "Bienvenidos";
        break;
    case 2:
        $msg = "Willkommen";
        break;
    default:
        $msg = "Welcome";
        break;
}

$this->view->assign("myMessage", $msg);
于 2012-05-04T10:34:23.207 に答える
8

現在の言語を取得するには、VHS拡張機能に含まれているPage/LanguageViewHelperを使用できます。

{v:page.language(languages: 'en,fr', pageUid: '0', normalWhenNoLanguage: 'en')}

こちらをご覧ください:http://fluidtypo3.org/viewhelpers/vhs/1.8.3/Page/LanguageViewHelper.html

于 2014-03-27T11:35:06.713 に答える
5

私の解決策はこれです:

データ=TSFE:sys_language_uid

(出力は言語UIDです)

page = PAGE
page {

    ## Fluid-Template ##
    10 = FLUIDTEMPLATE
    10 {
        ## Variablen ##
        variables {
            pageTitle = TEXT
            pageTitle.data = page:title
            siteTitle = TEXT
            siteTitle.data = TSFE:tmpl|setup|sitetitle
            rootPage = TEXT
            rootPage.data = leveluid:0
            baseurl = TEXT
            baseurl.value = {$config.domain}
            pageLanguage = TEXT
            pageLanguage.data = TSFE:sys_language_uid
        }

        ## Settings ##
        settings {

        }
    }
}

これで、FLUIDで新しい「変数」を使用できるようになりました。

<f:if condition="{pageLanguage}==0">
    <f:then><a href="http://domain.cc/" title="">DE</a></f:then>
    <f:else><a href="http://domain.cc/en/" title="">EN</a></f:else>
</f:if>

または、これをより多くの言語コードに使用します。

<f:if condition="{pageLanguage}==0">
    <f:then>Do this</f:then>
    <f:else if="{pageLanguage}==1">
        Do this instead if variable two evals true
    </f:else>
    <f:else if="{pageLanguage}==2">
        Or do this if variable three evals true
    </f:else>
    <f:else>
        Or do this if nothing above is true
    </f:else>
</f:if>
于 2018-07-24T14:13:17.800 に答える
2

TYPO3言語アスペクトによる別のアプローチ

Extbase Extension内の例(例showAction

# instantiate TYPO3 Context and get language aspect
$languageAspect = GeneralUtility::makeInstance(Context::class)->getAspect('language');

# now assign any property of the actual language to the view. In this example: the language uid.
$this->view->assign('actualLanguageId', $languageAspect->getId());

TYPO310.4LTSでテストされた例

于 2021-08-05T11:44:26.850 に答える
1

別のオプションはv:page.languageMenu、VHS拡張機能からViewHelperを使用することです。これにより、他のViewHelperと組み合わせて、Fluidテンプレートで次のようなものを使用できるようになります。

{namespace v=Tx_Vhs_ViewHelpers}
<v:page.languageMenu as="languages">

    <!-- gets the current language key -->
    {languages -> v:iterator.filter(propertyName: 'current', filter: 1)}

    <!-- iterates over flag names of all languages which apply to the current page -->
    <f:for each="{languages -> v:iterator.extract(key: 'flag')}" as="languageFlagName">

        <!-- example suggestion: image -->
        <f:image src="{f:uri.resources(path: 'Images/Flags/{languageFlagName}.png')}" />

        <!-- example suggestion: label read from LLL:EXT:myext/Resources/Private/Language/locallang.xml:languages.$languageFlagName -->
        <f:translate key="languages.{languageFlagName}" default="{languageFlagName} />

    </f:for>

</v:page.languageMenu>

これらの各ViewHelperから返される値を使用して実行できることは他にもたくさんv:var.setあります。たとえば、抽出されたフラグ名を含む新しい変数をテンプレートに定義するために使用できます。

<!-- Using {languages} inside <v:page.languageMenu> like above -->
{languages -> v:iterator.filter(propertyName: 'current', filter: 1) -> v:var.set(name: 'currentLanguage')}
<!-- variable {currentLanguage} now contains an array of values describing the current language -->
于 2013-11-13T01:10:56.947 に答える