TYPO3:如何使用流畅的模板处理多语言支持
TYPO3: How to handle multi language support with fluid templates
我正在处理一个支持多语言的页面。我已经设法让它与 realurl 和后端一起工作。
现在我不太确定如何从后端呈现翻译后的文本。
例如:我有一个默认语言 (en) 的页面,标题为 "Contact"。现在我已经创建了一个德语翻译,标题为 "Kontakt"。
根据我的配置,我的 url 现在说:
- zh: 域。com/en/contact
- de: 域。com/de/kontakt
但我使用流畅模板呈现的导航仍然显示默认语言,即使是德语 url。是否有 {page.title.currentLanguage} 之类的变量?
当然我可以在 locallang.xlf 文件中创建一个翻译,但为了使用 f:translate viewhelper,但这意味着我必须翻译页面名称两次,对吗?
感谢大家的帮助!
我当前用于呈现导航的部分:
<nav>
<div class="container">
<ul class="content btns">
<f:for each="{mainnavigation}" as="mainnavigationItem">
<li class="{f:if(condition: mainnavigationItem.active, then:'active')}">
<a href="{mainnavigationItem.link}" target="{mainnavigationItem.target}" title="{mainnavigationItem.title}">{mainnavigationItem.title}</a>
<f:if condition="{mainnavigationItem.children}">
<ul>
<f:for each="{mainnavigationItem.children}" as="child">
<li class="{f:if(condition: child.active, then:'active')}">
<a href="{child.link}" target="{child.target}" title="{child.title}">{child.title}</a>
</li>
</f:for>
</ul>
</f:if>
</li>
</f:for>
</ul>
</div>
</nav>
我使用 typolink 来渲染我的 a 标签:
<f:link.typolink parameter="{item.data.uid}" target="{item.target}" title="{item.title}" class="menu-link">{item.title}</f:link.typolink>
我找到了我正在寻找的解决方案:
在设置常规本地化设置时,我从本地化文档中添加了一些 TypoScript configuration。我添加了以下几行:
# Localization:
config {
linkVars = L(int)
sys_language_uid = 0
sys_language_overlay = 1
sys_language_mode = content_fallback
language = en
locale_all = en_US.UTF-8
htmlTag_setParams = lang="en" dir="ltr" class="no-js"
}
[globalVar = GP:L = 1]
config {
sys_language_uid = 1
language = de
locale_all = de_DE.UTF-8
htmlTag_setParams = lang="de" dir="ltr" class="no-js"
}
[global]
[globalVar = GP:L = 2]
config {
sys_language_uid = 2
language = da
locale_all = da_DK.UTF-8
htmlTag_setParams = lang="da" dir="ltr" class="no-js"
}
[global]
当然是使用我的语言 ID。这解决了我的问题,现在翻译后的页面标题出现在标题标签和我的导航中。
我猜 "sys_language_overlay = 1" 选项有这个目的。
我正在处理一个支持多语言的页面。我已经设法让它与 realurl 和后端一起工作。
现在我不太确定如何从后端呈现翻译后的文本。
例如:我有一个默认语言 (en) 的页面,标题为 "Contact"。现在我已经创建了一个德语翻译,标题为 "Kontakt"。
根据我的配置,我的 url 现在说:
- zh: 域。com/en/contact
- de: 域。com/de/kontakt
但我使用流畅模板呈现的导航仍然显示默认语言,即使是德语 url。是否有 {page.title.currentLanguage} 之类的变量?
当然我可以在 locallang.xlf 文件中创建一个翻译,但为了使用 f:translate viewhelper,但这意味着我必须翻译页面名称两次,对吗?
感谢大家的帮助!
我当前用于呈现导航的部分:
<nav>
<div class="container">
<ul class="content btns">
<f:for each="{mainnavigation}" as="mainnavigationItem">
<li class="{f:if(condition: mainnavigationItem.active, then:'active')}">
<a href="{mainnavigationItem.link}" target="{mainnavigationItem.target}" title="{mainnavigationItem.title}">{mainnavigationItem.title}</a>
<f:if condition="{mainnavigationItem.children}">
<ul>
<f:for each="{mainnavigationItem.children}" as="child">
<li class="{f:if(condition: child.active, then:'active')}">
<a href="{child.link}" target="{child.target}" title="{child.title}">{child.title}</a>
</li>
</f:for>
</ul>
</f:if>
</li>
</f:for>
</ul>
</div>
</nav>
我使用 typolink 来渲染我的 a 标签:
<f:link.typolink parameter="{item.data.uid}" target="{item.target}" title="{item.title}" class="menu-link">{item.title}</f:link.typolink>
我找到了我正在寻找的解决方案:
在设置常规本地化设置时,我从本地化文档中添加了一些 TypoScript configuration。我添加了以下几行:
# Localization:
config {
linkVars = L(int)
sys_language_uid = 0
sys_language_overlay = 1
sys_language_mode = content_fallback
language = en
locale_all = en_US.UTF-8
htmlTag_setParams = lang="en" dir="ltr" class="no-js"
}
[globalVar = GP:L = 1]
config {
sys_language_uid = 1
language = de
locale_all = de_DE.UTF-8
htmlTag_setParams = lang="de" dir="ltr" class="no-js"
}
[global]
[globalVar = GP:L = 2]
config {
sys_language_uid = 2
language = da
locale_all = da_DK.UTF-8
htmlTag_setParams = lang="da" dir="ltr" class="no-js"
}
[global]
当然是使用我的语言 ID。这解决了我的问题,现在翻译后的页面标题出现在标题标签和我的导航中。
我猜 "sys_language_overlay = 1" 选项有这个目的。