xsl翻译系统

发布于 2024-11-03 08:48:16 字数 310 浏览 1 评论 0原文

我使用 PHP 作为编程语言,对于表示逻辑(对于我的输出),我使用 XSL。

现在我需要为我的项目创建翻译系统。在 xslt 中进行翻译的最佳方法是什么?

从Google搜索中我看到有两个选项:

  1. 在PHP XSL中注册函数,但我不喜欢这个想法,因为我想使我的表示逻辑尽可能独立
  2. 加载xml文件包含翻译成 xsl 变量,但是如果翻译字符串中有变量怎么办?

也许还有其他一些选项如何翻译文本?最好的方法是什么?

谢谢

I am using PHP as a programming language and for presentational logic (for my output) I am using XSL.

Now I need to create translation system for my project. What is the best way to do translations in xslt?

from the Google search I see that there are two options:

  1. Register Functions in PHP XSL, but i do not like this idea, because i whant to keep my presentation logic as separate as possible
  2. Load xml file with translations into xsl variable, but what if there are variables in translation string?

Maybe there are some other options how to translate text? What is the best way?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云醉月微眠 2024-11-10 08:48:16

此样式表:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:html="http://www.w3.org/1999/xhtml"
 exclude-result-prefixes="html">
    <xsl:strip-space elements="*"/>
    <xsl:preserve-space elements="translation html:*"/>
    <xsl:key name="kResourceById" match="resource" use="@id"/>
    <xsl:variable name="vConfig" select="/config"/>
    <xsl:variable name="vCatalog" select="document('catalog.xml')"/>
    <xsl:template match="/">
        <xsl:apply-templates select="document('layout.xml')/node()"/>
    </xsl:template>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="html:*[@id]">
        <xsl:variable name="vCurrent" select="."/>
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:for-each select="$vCatalog">
                <xsl:variable name="vResource"
                 select="key('kResourceById',$vCurrent/@id)"/>
                <xsl:apply-templates
                 select="($vResource/translation[@xml:lang=$vConfig/lang]
                          |$vCurrent[not($vResource)])/node()"/>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[not(self::html:*)]">
        <xsl:apply-templates
         select="$vConfig/*[name()=name(current())]/node()"/>
    </xsl:template>
</xsl:stylesheet>

使用此输入:

<config>
    <lang>en</lang>
    <sn>1</sn>
    <en>10</en>
</config>

catalog.xml

<catalog>
    <resource id="str1">
        <translation xml:lang="en"
                    >enter number between <sn/> and <en/>.</translation>
        <translation xml:lang="lt"
                    >iveskite skaiciu tarp <sn/> ir <en/>.</translation>
    </resource>
</catalog>

layout.xml

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <form>
            <label id="str1"/>
            <input id="val1" type="input"/>
            <input type="submit"/>
        </form>
    </body>
</html>

输出:

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <form>
            <label id="str1">enter number between 1 and 10.</label>
            <input id="val1" type="input"></input>
            <input type="submit"></input>
        </form>
    </body>
</html>

使用此输入:

<config>
    <lang>lt</lang>
    <sn>20</sn>
    <en>30</en>
</config>

输出:

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <form>
            <label id="str1">iveskite skaiciu tarp 20 ir 30.</label>
            <input id="val1" type="input"></input>
            <input type="submit"></input>
        </form>
    </body>
</html>

This stylesheet:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:html="http://www.w3.org/1999/xhtml"
 exclude-result-prefixes="html">
    <xsl:strip-space elements="*"/>
    <xsl:preserve-space elements="translation html:*"/>
    <xsl:key name="kResourceById" match="resource" use="@id"/>
    <xsl:variable name="vConfig" select="/config"/>
    <xsl:variable name="vCatalog" select="document('catalog.xml')"/>
    <xsl:template match="/">
        <xsl:apply-templates select="document('layout.xml')/node()"/>
    </xsl:template>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="html:*[@id]">
        <xsl:variable name="vCurrent" select="."/>
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:for-each select="$vCatalog">
                <xsl:variable name="vResource"
                 select="key('kResourceById',$vCurrent/@id)"/>
                <xsl:apply-templates
                 select="($vResource/translation[@xml:lang=$vConfig/lang]
                          |$vCurrent[not($vResource)])/node()"/>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[not(self::html:*)]">
        <xsl:apply-templates
         select="$vConfig/*[name()=name(current())]/node()"/>
    </xsl:template>
</xsl:stylesheet>

With this input:

<config>
    <lang>en</lang>
    <sn>1</sn>
    <en>10</en>
</config>

And catalog.xml:

<catalog>
    <resource id="str1">
        <translation xml:lang="en"
                    >enter number between <sn/> and <en/>.</translation>
        <translation xml:lang="lt"
                    >iveskite skaiciu tarp <sn/> ir <en/>.</translation>
    </resource>
</catalog>

And layout.xml:

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <form>
            <label id="str1"/>
            <input id="val1" type="input"/>
            <input type="submit"/>
        </form>
    </body>
</html>

Output:

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <form>
            <label id="str1">enter number between 1 and 10.</label>
            <input id="val1" type="input"></input>
            <input type="submit"></input>
        </form>
    </body>
</html>

With this input:

<config>
    <lang>lt</lang>
    <sn>20</sn>
    <en>30</en>
</config>

Output:

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <form>
            <label id="str1">iveskite skaiciu tarp 20 ir 30.</label>
            <input id="val1" type="input"></input>
            <input type="submit"></input>
        </form>
    </body>
</html>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文