如何显示本地化日期?

时间:2013-09-05 14:28:58

标签: xslt localization internationalization

如何让XSLT向用户显示本地化日期(在用户代理的区域设置中)。

例如,给定ISO格式的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'?>

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

1 个答案:

答案 0 :(得分:3)

标准XSLT 1.0没有任何本地化日期的功能。

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

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

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