我正在运行Typo3 v9.5.4 Onepager风格的网站。内容直接从tt_content加载。该网站有两种FE语言(德语/英语)。 我有一个带有定位链接的CTA按钮。该按钮是用错字创建的。我为德语版本创建了一个按钮,为英语版本创建了一个按钮,因为它们具有另一个值和另一个ancorlink。
我不确定是否可以直接从Fluid ViewHelper中访问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>
这是我对两个按钮对象的打字稿
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 Content加载时没有Fluidtemplate,它直接从tt_content加载内容):
//--------------------- 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
}
}
因此,如果内容包含sys_language_uid 1(英语),我想加载buttonEn。否则,我希望它加载buttonDe。
我是否需要创建一个Typoscript对象,然后将该对象加载到f:if viewhelper中?如果是这样,我如何创建此Typoscript对象。
感谢您的帮助!
答案 0 :(得分:0)
您应该使用locallang文件,并在TypoScript中引用它。
locallang.xlf
的locallang文件(复制现有文件并删除所有值)de.
前加上de.locallang.xlf
,并添加德语标签lib.button.data = LLL:EXT:your_ext/path/to/locallang/locallang.xlf:buttonLabel
在TypoScript中进行引用,请参见https://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Index.html#lll 此TS getText函数根据设置的语言ID自动获取标签,并且按钮仅需要一个TS。
示例:https://docs.typo3.org/typo3cms/TyposcriptIn45MinutesTutorial/UsingGetText/Index.html
答案 1 :(得分:0)
简单方法(纯文字)
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]
但是专业的解决方案是在语言文件中配置标签(请参见ThomasLöffler的答案)并使用:
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]
对于与语言相关的常量数据,您可以使用拼写条件重新定义非默认语言的值。 (或定义每种语言的后备条件)。