根据目前的前端语言TYPO3装载对象

问题描述 投票:0回答:2

我运行一个TYPO3的v9.5.4 Onepager风格的网站。内容是直接从tt_content加载。该网站有两个FE语言(德语/英语)。我有一个CTA按钮,有一个anchorlink。按钮是Typo脚本创建。我创建了一个按钮,德语版,一个是英语VERSON BC他们还有另外一个值,另一ancorlink。

我不知道如果我可以从流体视图助手直接访问tt_content场。这是我的代码我试过

        <f:if condition="{tt_content.sys_language_uid} == 1">
          <f:then>
              <f:format.raw>{buttonEn}</f:format.raw>
          </f:then>
          <f:else>
              <f:format.raw>{buttonDe}</f:format.raw>
          </f:else>
        </f:if>

这是我的两个按钮对象的TypoScript

lib.buttonDe = TEXT
lib.buttonDe {
    value = German Text
    stdWrap.typolink.parameter = #anchorlinkDE
    stdWrap.typolink.ATagParams = class="button"
}

lib.buttonEn = TEXT
lib.buttonEn {
    value = English Text
    stdWrap.typolink.parameter = #anchorlinkEN
    stdWrap.typolink.ATagParams = class="button"
}

这是加载内容的多国语言菜单和Fluidtemplate(该Onepager内容加载没有Fluidtemplate,它加载直接从tt_content内容)的Typo脚本:

//--------------------- One Pager Content

lib.sectionContent = HMENU
lib.sectionContent {
  excludeUidList = 12,13,16,17,29
  1 = TMENU
  1 {
    NO = 1
    NO {
      doNotLinkIt = 1
      stdWrap >
      stdWrap {
        cObject = COA
        cObject {
          if.value = 4
          if.equals.field = doktype
          if.negate = 1
          10 < temp.titleSectionId
          10.wrap = <section id="|">
          20 = CONTENT
          20 {
            table = tt_content
            select {
              pidInList.field = uid
              orderBy = colPos,sorting
              # Only selects Content where CE Layout is 0
              where = (tt_content.layout = "0") 
            }

            wrap = <div class="container">|</div>
            renderObj < tt_content
          }
          30 = TEXT
          30 {
            wrap = </section>
          }
        }
      }
    }
  }
}

//---------------------

// Language Selector
lib.langmenu = HMENU
lib.langmenu {
    special = language
    addQueryString = 1
    special.value = {$config.language.uids}
    1 = TMENU
    1 {
        wrap = <ul class="dg-langmenu row">|</ul>
        NO = 1
        NO {
            stdWrap.current = 1
            stdWrap.setCurrent = {$config.language.labels}
            allWrap = <li class="col s6">|</li>
        }

        ACT < .NO
        ACT.doNotLinkIt = 1
        ACT.allWrap = <li class="act col s6">|</li>
    }
} 


page = PAGE
page{
    10 = FLUIDTEMPLATE
    10 {

        templateName = TEXT
        templateName.stdWrap{
            cObject = TEXT
            cObject{
                data = levelfield:-2,backend_layout_next_level,slide
                override.field = backend_layout
                split {
                    token = pagets__
                    1.current = 1
                    1.wrap = |
                    }
            }  
        ifEmpty = onePager
        }

    templateRootPaths {
    10 = {$path.privat}Templates/
    }
    layoutRootPaths {
        10 = {$path.privat}Layouts/
    }
    partialRootPaths {
        10 = {$path.privat}Partials/
    }

    variables{
    buttonDe < lib.buttonDe
    buttonEnd< lib.buttonEn
    }


}

所以我想加载buttonEn如果内容有sys_language_uid 1(英文)一样,我希望它加载buttonDe。

我需要创建一个Typo脚本对象,然后这个对象加载到F:如果视图助手?如果是的话我怎么创造这个Typo脚本对象。

谢谢你的帮助!

typo3 typoscript fluid
2个回答
0
投票

最简单的方法(纯Typo脚本)

lib.button = TEXT
lib.button {
    value = English text
    lang.de = Deutscher Text
    stdWrap.typolink.parameter = #anchorlinkDE
    stdWrap.typolink.ATagParams = class="button"
}
[siteLanguage("locale") == "en_EN.UTF-8"]
  lib.buton.stdWrap.typolink.parameter = #anchorlinkEN
[global]

但专业的解决方案是在语言文件(见托马斯洛夫勒答案),并使用配置您的标签:

lib.button = TEXT
lib.button {
    lib.button.data = LLL:EXT:site_extension/Resources/Private/Language/locallang.xlf:button_label
    stdWrap.typolink.parameter = #anchorlinkEN
    stdWrap.typolink.ATagParams = class="button"
}
[siteLanguage("locale") == "de_DE.UTF-8"]
  lib.buton.stdWrap.typolink.parameter = #anchorlinkDE
[global]

对于语言相关的常数数据可能使用的TypoScript条件重新定义您的非默认语言的值。 (或定义为每种语言回退和条件。)


0
投票

您应该使用locallang文件,并指它在Typo脚本。

  1. 创建locallang文件(复制现有并删除所有值)命名locallang.xlf
  2. 添加您的英文标签中有
  3. 创建与文件名(de.)前面加上de.locallang.xlf同一文件夹中locallang文件,并添加德国标签
  4. 通过使用lib.button.data = LLL:EXT:your_ext/path/to/locallang/locallang.xlf:buttonLabel引用它的Typo脚本,看到https://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Index.html#lll

该TS的getText功能自动获得根据设定的语言ID标签,你只需要为按钮一个TS。

例如:https://docs.typo3.org/typo3cms/TyposcriptIn45MinutesTutorial/UsingGetText/Index.html

© www.soinside.com 2019 - 2024. All rights reserved.