日期/时间占位符本地化

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 文件中: HNÉ(在 //xbl:implementation/xf:model/xf:instance[@id='orbeon-resources']/resources 节点内) @m4gic 完美,我还添加了此资源,因此您在升级时不必再次进行更改。将在 2021.1 年。 在form-runner.jar\xbl\orbeon\time\time.xbl中有类似的时间占位符设置。匈牙利版本应该有 ópm ;) 知道了,我们对所有其他语言都使用大写字母,所以为了保持一致性,在匈牙利语中应该是“ÓPM”,对吗? -亚历克斯

以上是关于日期/时间占位符本地化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用格式化占位符本地化字符串?

从本地化中排除占位符文本

如何在 intl.formatMessage 中使用占位符

使用 i18next(占位符,值)翻译自定义属性

输入类型日期的占位符(仅当未输入值时)

输入类型=“日期”占位符 - 移动设备