2013-09-05 45 views
1

我如何让XSLT向用户显示本地化的日期(在用户代理的语言环境中)。如何显示本地化日期?

例如,给定在ISO格式的XML date2013-09-04T10:46:19.658):

<?xml version="1.0" encoding="utf-8"?> 
<Stuff> 
    <Created>2013-09-04T10:46:19.658</Created> 
</Stuff> 

并且样式表的开端:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes" version="5.0" doctype-system="about:legacy-compat"/> 
    <xsl:template match="/Stuff"> 
    <html> 
    <body> 
     Created: <xsl:value-of select="format-date('Created')"/> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

所需的输出取决于,当然,在区域设置的用户代理(例如客户浏览器):

Created: 01/11/34 
Created: 05.09.13 
Created: 05.09.2013 
Created: 05/09 2013 
Created: 05/09/2013 
Created: 05-09-13 
Created: 05-09-2013 
Created: 09.05.2013 
Created: 09/05/2013 
Created: 13.09.05 
Created: 2013.09.05 
Created: 2013.09.05. 
Created: 2013/09/05 
Created: 2013/9/5 
Created: 2013-09-05 
Created: 2013-9-5 
Created: 29/10/34 
Created: 5. 9. 2013 
Created: 5.09.2013 
Created: 5.9.2013 
Created: 5.9.2013 г. 
Created: 5.9.2013. 
Created: 5//09//2013 
Created: 5/09/2013 
Created: 5/9/2013 
Created: 5/9/2556 
Created: 5-9-2013 
Created: 9/5/2013 

XSLT是否支持本地化?

它在客户端上运行

将XML转换为HTML发生在客户端上。由于转换发生在客户端上,客户端(显然)知道它自己的区域设置。

例如,客户机被赋予一些xml

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type='text/xsl' href='/Styles/Contoso_Handheld.xslt' media='handheld'?> 
<?xml-stylesheet type='text/xsl' href='/Styles/Contoso_iPhone.xslt' media='only screen and (max-device-width: 480px)'?> 
<?xml-stylesheet type='text/xsl' href='/Styles/Contoso.xslt' media='all'?> 
<Stuff> 
    <Created>2013-09-04T10:46:19.658</Created> 
</Stuff> 

通知的线,其中在指示使用哪个XSLT客户端。

<?xml-stylesheet type='text/xsl' href='/Styles/Contoso_Handheld.xslt' media='handheld'?> 
<?xml-stylesheet type='text/xsl' href='/Styles/Contoso_iPhone.xslt' media='only screen and (max-device-width: 480px)'?> 
<?xml-stylesheet type='text/xsl' href='/Styles/Contoso.xslt' media='all'?> 

用户代理取的XSLT,将XML,并将其显示给用户。所有这些处理都发生在客户端的语言环境中。

回答

3

标准XSLT 1.0没有任何函数来本地化日期。

XSLT 2.0具有支持本地化的日期和日期时间格式化功能:请参阅here但实现可能有所不同 - 例如Saxon似乎不实现日历/语言部分。

特定的XSLT实现具有支持日期 - 时间本地化的扩展功能 - 例如参见this

即使您有支持本地化的格式化函数,您仍然会遇到查找并传递正确语言环境的问题 - 如果XSLT正在服务器上运行,并且结果在浏览器中呈现,则服务器的语言环境可能是错误的,所以你需要从HTTP标头或一些JavaScript中提取区域信息并在服务器上使用它。