日期/时间占位符本地化
Posted
技术标签:
【中文标题】日期/时间占位符本地化【英文标题】:Date/Time placeholder localization 【发布时间】:2021-09-03 05:12:22 【问题描述】:我正在处理 Orbeon 2018 表单运行器中日期/时间占位符的本地化(尽管这似乎在 2019 年和 2020 年都没有改变)。
我要找的定义在 orbeon-form-runner.jar\xbl\orbeon\date\date.xbl (和time/time.xbl,不过现在,我觉得讨论一下就够了第一个) 文件,更具体地说是:
<xf:var
name="placeholder"
value="
let $format := xxf:property('oxf.xforms.format.input.date'),
$cleaned := translate($format, '[01]', ''),
$duplicate := replace(replace(replace($cleaned,
'M', 'MM'),
'D', 'DD'),
'Y', 'YYYY'),
$format-en := instance('orbeon-resources')/resource[@xml:lang = 'en']/format,
$format-lang := xxf:r('format'),
$translated := translate($duplicate, $format-en, $format-lang)
return
$translated
"/>
<xh:input type="text" placeholder="$placeholder" id="input"/>
占位符变量是在 html 输入上组装的,这一点很清楚。
在我的语言中,YYYY、MM、DD 不是日期部分的正确占位符,因此我的要求是根据当前的请求区域设置更改它们。
起初我尝试扩展apps/fr/18n/resource.xml中的标签,并将静态'MM'、'DD'等常量替换为xxf:r('components.labels.MM ', '|fr-fr-resources|')) 和类似的东西没有任何成功(好的,占位符已显示,但与我修改之前可见的默认占位符相同)。
我的第二种方法是将这些标签放在同一个文件中,并以相同的方式引用它们:xxf:r('MM'),不成功(与第一种情况相同的结果)。
我的第三种方法,我现在在这里,是尝试硬编码这些静态的东西,只为我的语言环境修复这些标签(使用 xsl:choose),我在这里:我找不到到底怎么可能我在这里获取请求区域设置(在 xbl 文件的上下文中)。 和 变量指向正确的当前请求语言环境(它们显示为“en”)。
你知道如何正确解决这个问题吗?
【问题讨论】:
【参考方案1】:您通过oxf.xforms.format.input.date
属性定义输入格式。并且只能有一种输入格式,不能依赖于当前的语言。
在占位符中,组件显示您在 oxf.xforms.format.input.date
中定义的格式,但更改字母 M(月)、D(日)和 Y(年)以匹配当前语言,这是由将resource
添加到orbeon-resources
,目前有:
<resource xml:lang="en"><format>MDY</format></resource>
<resource xml:lang="fr"><format>MJA</format></resource>
<resource xml:lang="de"><format>MTJ</format></resource>
<resource xml:lang="pl"><format>YMD</format></resource>
【讨论】:
这就是解决方案,非常感谢! 为了完整起见:我把这一行放到 form-runner.jar\xbl\orbeon\date\date.xbl 文件中:以上是关于日期/时间占位符本地化的主要内容,如果未能解决你的问题,请参考以下文章