TYPO3:在 Fluid 模板中硬编码的语言相关变量
TYPO3: language dependent variable that is hard-coded in a Fluid template
我有一个使用 TYPO3 V7.6.18 构建的 多语言 站点。它使用的标语应保持可编辑但对于三种语言不同。这是在 Fluid 模板中硬编码的变量。
对于此类变量,我使用了一个文件 Configuration/TypoScript/constants.ts
,我在其中定义了可以编辑 (WEB -> Template -> Constant Editor
) 和使用的变量:
#---------------------------------------------------------------------
# constants.ts
#---------------------------------------------------------------------
# customsubcategory=general=General Setup
myextension.configuration {
general {
# cat=myextension/general/05; type=string; label=Website Slogan.
slogan= website slogan in main language
}
}
[globalVar = GP:L=1]
myextension.configuration.general.slogan = website slogan in second language
[end]
[globalVar = GP:L=2]
myextension.configuration.general.slogan = website slogan in third language
[end]
然后我绑定Configuration/TypoScript/setup.ts
中的变量使用:
#---------------------------------------------------------------------
# setup.ts
#---------------------------------------------------------------------
page = PAGE
page {
# Page Main template
10 = FLUIDTEMPLATE
10 {
variables {
# slogan
slogan = TEXT
slogan.value = {$myextension.configuration.general.slogan}
}
}
}
此代码有效,但只有主要语言的标语是可编辑的...
有什么解决方案可以让其他两种语言的标语可以编辑吗?
我建议改用语言标识符作为常量:
myextension.configuration {
general {
slogan {
# cat=myextension/general/05; type=string; label=Website Slogan in default language.
default = website slogan in main language
# cat=myextension/general/06; type=string; label=Website Slogan in second language.
second = website slogan in second language
# cat=myextension/general/07; type=string; label=Website Slogan in third language.
third = website slogan in third language
}
}
}
然后将条件移动到设置中:
page = PAGE
page {
# Page Main template
10 = FLUIDTEMPLATE
10 {
variables {
# slogan
slogan = TEXT
slogan.value = {$myextension.configuration.general.slogan.default}
}
}
}
[globalVar = GP:L=1]
page.10.variables.slogan.value = {$myextension.configuration.general.slogan.second}
[end]
[globalVar = GP:L=2]
page.10.variables.slogan.value = {$myextension.configuration.general.slogan.third}
[end]
存在三种可能性,Mathias 和 Riccardo 提到了其中两种。我将添加第三个,列出它们的优缺点。
因此,首先是第三种可能性,即创建一个内容元素(最好是 header
类型)并创建一个 TypoScript 常量来保存其 uid
.
# cat=myextension/general/05; type=int; label=Slogan CE UID
myextension.configuration.general.sloganUid =
然后在您的流体变量中获取此内容元素的 header:
page.10.variables.slogan = CONTENT
page.10.variables.slogan {
select.uidInList = {$myextension.configuration.general.sloganUid}
table = tt_content
renderObj = TEXT
renderObj.field = header
}
创建一个 sysfolder,创建一个 header 类型的内容元素,并在您的常量中探测它的 uid。也许您需要向 .select
添加更多内容才能使其正常工作 - 我一直不确定。
现在优缺点:
三个常量,正如 Mathias 所建议的:
- pro:关闭您所做的,简单,代码少,更改不需要文件访问权限
- con: 需要为每个额外的语言添加另一个常量和设置
locallang.xlf:
- pro: 就是你期待翻译的地方(在代码中),很容易添加翻译,可以去VCS
- con:需要文件访问权限才能更改
内容元素:
- pro:管理员可以授予编辑访问权限(如果他们愿意),最容易添加翻译
- con:添加数据库查询(但通常缓存),很容易从 BE
搞砸
我有一个使用 TYPO3 V7.6.18 构建的 多语言 站点。它使用的标语应保持可编辑但对于三种语言不同。这是在 Fluid 模板中硬编码的变量。
对于此类变量,我使用了一个文件 Configuration/TypoScript/constants.ts
,我在其中定义了可以编辑 (WEB -> Template -> Constant Editor
) 和使用的变量:
#---------------------------------------------------------------------
# constants.ts
#---------------------------------------------------------------------
# customsubcategory=general=General Setup
myextension.configuration {
general {
# cat=myextension/general/05; type=string; label=Website Slogan.
slogan= website slogan in main language
}
}
[globalVar = GP:L=1]
myextension.configuration.general.slogan = website slogan in second language
[end]
[globalVar = GP:L=2]
myextension.configuration.general.slogan = website slogan in third language
[end]
然后我绑定Configuration/TypoScript/setup.ts
中的变量使用:
#---------------------------------------------------------------------
# setup.ts
#---------------------------------------------------------------------
page = PAGE
page {
# Page Main template
10 = FLUIDTEMPLATE
10 {
variables {
# slogan
slogan = TEXT
slogan.value = {$myextension.configuration.general.slogan}
}
}
}
此代码有效,但只有主要语言的标语是可编辑的...
有什么解决方案可以让其他两种语言的标语可以编辑吗?
我建议改用语言标识符作为常量:
myextension.configuration {
general {
slogan {
# cat=myextension/general/05; type=string; label=Website Slogan in default language.
default = website slogan in main language
# cat=myextension/general/06; type=string; label=Website Slogan in second language.
second = website slogan in second language
# cat=myextension/general/07; type=string; label=Website Slogan in third language.
third = website slogan in third language
}
}
}
然后将条件移动到设置中:
page = PAGE
page {
# Page Main template
10 = FLUIDTEMPLATE
10 {
variables {
# slogan
slogan = TEXT
slogan.value = {$myextension.configuration.general.slogan.default}
}
}
}
[globalVar = GP:L=1]
page.10.variables.slogan.value = {$myextension.configuration.general.slogan.second}
[end]
[globalVar = GP:L=2]
page.10.variables.slogan.value = {$myextension.configuration.general.slogan.third}
[end]
存在三种可能性,Mathias 和 Riccardo 提到了其中两种。我将添加第三个,列出它们的优缺点。
因此,首先是第三种可能性,即创建一个内容元素(最好是 header
类型)并创建一个 TypoScript 常量来保存其 uid
.
# cat=myextension/general/05; type=int; label=Slogan CE UID
myextension.configuration.general.sloganUid =
然后在您的流体变量中获取此内容元素的 header:
page.10.variables.slogan = CONTENT
page.10.variables.slogan {
select.uidInList = {$myextension.configuration.general.sloganUid}
table = tt_content
renderObj = TEXT
renderObj.field = header
}
创建一个 sysfolder,创建一个 header 类型的内容元素,并在您的常量中探测它的 uid。也许您需要向 .select
添加更多内容才能使其正常工作 - 我一直不确定。
现在优缺点:
三个常量,正如 Mathias 所建议的:
- pro:关闭您所做的,简单,代码少,更改不需要文件访问权限
- con: 需要为每个额外的语言添加另一个常量和设置
locallang.xlf:
- pro: 就是你期待翻译的地方(在代码中),很容易添加翻译,可以去VCS
- con:需要文件访问权限才能更改
内容元素:
- pro:管理员可以授予编辑访问权限(如果他们愿意),最容易添加翻译
- con:添加数据库查询(但通常缓存),很容易从 BE 搞砸