我正在处理一个项目,在这个项目中,我需要创建一个html文件,该文件支持xslt转换中的几种语言。我已经阅读了几篇关于这方面的文章,并在这里查看了以前在堆栈溢出中的一些问题,比如:xslt本地化。
将翻译放在一个单独的xml文档中的解决方案就像我想要的那样工作。但是,我想知道是否存在"translate.xml“文件的标准化/最佳实践?在上面提到的帖子中,举了以下例子:
<strings>
<string language="en" key="ContactDetails">Contact Details</string>
<string language="sv" key="ContactDetails">Kontaktuppgifter</string>
[...]
</strings> 正如我说过的,使用键从transalte.xml检索字符串的解决方案可以按我的意愿工作,但如果可以的话,我喜欢使用标准,所以我的问题是,这些类型的translate.xml文件是否有标准化的模式,或者在这样的"translate.xml“中是否有标签等命名的最佳实践?
发布于 2015-09-11 13:23:49
问得好!
是的,有一种处理语言的标准化方法。使用属性。名称空间神奇地存在于任何XML文档中,并且是核心XML规范的一部分。这是定义为接受语言说明符。,根据RFC-4646的说法。这些是常见的说明符,如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>使用带有复制成语的查询语言(即XSLT ),它与函数一起工作得很好,它从最近的祖先或self中获取适用的语言,如果找到,返回布尔值true。如果您设置主语言,比如en-US,它也会找到类似于en的语言变体。
下面的代码假设XSLT1.0,但也适用于2.0和3.0 (这段代码由Michael更正,参见注释):
<!-- 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" />注意:始终在最外层的元素上设置默认语言,因为如果根本找不到语言,lang()将返回false。您可以使用表达式lang('')进行测试,只有在没有设置语言的情况下,表达式才会返回false。
对于您的XML文件,如果您每种语言都有一个文件,并且不像上面建议的那样混合和匹配,那么仍然可以通过在根元素上设置xml:lang来使用相同的方法。因为这将在整个树中被继承,所以仍然可以使用lang()函数。
https://stackoverflow.com/questions/32523027
复制相似问题