Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xslt进行本地化,是否存在处理XML中不同语言的标准?_Xslt_Localization - Fatal编程技术网

使用xslt进行本地化,是否存在处理XML中不同语言的标准?

使用xslt进行本地化,是否存在处理XML中不同语言的标准?,xslt,localization,Xslt,Localization,我正在处理一个项目,我需要通过xslt转换创建一个支持多种语言的html文件。我已经阅读了几篇关于这一点的文章,并在stackoverflow中查看了前面的问题,例如: 而将翻译放在单独的xml文档中的解决方案正是我所希望的。但是我想知道“translate.xml”文件是否有任何标准化/最佳实践?在上面提到的文章中,以下是一个例子: <strings> <string language="en" key="ContactDetails">Contact Det

我正在处理一个项目,我需要通过xslt转换创建一个支持多种语言的html文件。我已经阅读了几篇关于这一点的文章,并在stackoverflow中查看了前面的问题,例如:

而将翻译放在单独的xml文档中的解决方案正是我所希望的。但是我想知道“translate.xml”文件是否有任何标准化/最佳实践?在上面提到的文章中,以下是一个例子:

<strings>
    <string language="en" key="ContactDetails">Contact Details</string>
    <string language="sv" key="ContactDetails">Kontaktuppgifter</string>
    [...]
</strings>   

联系方式
康塔克普格夫特
[...]
正如我所说,建议使用键从transalte.xml检索字符串的解决方案可以按我所希望的那样工作,但是如果有标准,我喜欢使用标准,所以我的问题是,这些类型的xml文件是否有标准化的模式,或者在这样的“translate.xml”中是否有某种关于标记命名等的最佳实践好问题

是的,有一种处理语言的标准化方法。使用。名称空间神奇地存在于任何XML文档中,并且是核心XML规范的一部分。这是根据。这些是常见的说明符,如
en
en-US
es
es-BR
,用于指定主要语言和语言变体

它的工作方式有点像名称空间。如果在元素上定义它,那么它将被该元素的所有后代继承,除非重新定义它,或者取消定义它以表示与语言无关的元素

例如:

<text xml:lang="en">
    We are 
    <t xml:lang="en-US">organizing</t>
    <t xml:lang="en-GB">organising</t>
    a conference on the effects of 
    <t xml:lang="en-US">color</t>
    <t xml:lang="en-GB">colour</t>
    in December this year.
</text>
注意:始终在最外面的元素上设置默认语言,因为如果没有找到任何语言,
lang()
将返回false。您可以使用表达式
lang(“”)
对此进行测试,只有在根本没有设置语言的情况下,该表达式才会返回false


关于XML文件,如果每种语言有一个文件,并且没有像上面建议的那样进行混合和匹配,那么仍然可以通过在根元素上设置
XML:lang
来使用相同的方法。由于这将在整个树中继承,因此您仍然可以使用
lang()
函数。

@michael,谢谢,我显然忘记了
lang()
函数自XPath 1.0以来就一直存在,这肯定比检查
xml:lang
的单个值要好。虽然您的建议不起作用,但是
xml:lang
属性在词汇上并没有应用于子体。更新。对不起,我测试错了。但是我明白了,主要的想法是通过的注意:在XSLT1.0中,不能在匹配模式中使用变量。而
lang()
必须有一个参数:
lang('en')
返回一个布尔值。@michael,显然,我对1.0:P有些生疏了,谢谢你提醒我:)。我已经更新了答案。
<!-- match English US language and default en -->
<xsl:template match="t[lang('en-US') or lang('en')">
    <xsl:apply-templates />
</xsl:template>

<!-- remove any other <t> -->
<xsl:template match="t" />