1

下面对另一个线程的回答似乎是我认为我需要的一个开始,但我在实现它时遇到了困难。

用于此目的的最佳库可能是 Globalize。它允许您指定语言环境(称为文化,但实际上是相同的)、格式(内置或您自己的)并实际将字符串解析为给定日期:

var dateString = "lunes, 29 de agosto de 2011"; // 看起来像是西班牙语中的长日期格式 var date = Globalize.parseDate( dateString, "D", "es" );

您需要附加适当的文化文件以及对 Globalize 的引用才能使其正常工作。请注意,库中已经定义了文化,所以不要害怕网页上的信息,您实际上不需要 .Net。

如果有人可以把它变成一个可行的例子,那么我就可以接受它并根据我的需要进行调整。

但是......有人知道另一种方法吗?

例如,我的字符串是:

Set 24, 2012 20:40:20”,罗马尼亚语有月份。

我需要它

" Sep 24, 2012 20:40:20" 有英文月份。

我需要一个可以采用语言代码(即 en、es、pl、ru、ro 等)并转换字符串中的月份的解决方案(需要能够处理所有 12 个月,而不仅仅是上述字符串中的那个)从外语到英语。

任何快速的帮助将不胜感激,以便我可以让我的网站重新启动并再次全速运行。

如果您需要我提供任何进一步的信息,请询问:)

问候罗斯

@Jukka K. Korpela

我有这个:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing Globalize</title>
<meta name="keywords" content="Globalize, Testing">
<meta name="description" content="Trying to get globalize to work.">
<script src="https://github.com/jquery/globalize/blob/master/lib/globalize.js"></script>
<script src="https://github.com/jquery/globalize/blob/master/lib/cultures/globalize.cultures.js"></script>
<script>
var monthString = 'sep'; // replace by code that extracts the string
var lang = 'ro';          // replace by code that picks up the right language
var month = Globalize.parseDate(monthString, 'MMM', lang);
if(month) {
  document.write(Globalize.format(month, 'MMM', 'en'));
} else {
  alert('Unrecognized month: ' + monthString);
}
</script>
</head>

但是当我在“http://htmledit.squarefree.com/”中测试时它不起作用请帮助:)

4

3 回答 3

1

我认为你可以使用 datejs 来达到你的目的。它能够通过文化文件以任何可用的语言(150+ 作为州)解析您的日期数据,然后将其保存为英语或您想要的任何其他语言。

看看:http ://code.google.com/p/datejs/

于 2012-09-25T23:06:00.677 回答
0

在 Globalize.js 中执行此类操作的方法是使用一种语言环境读取字符串,使用另一种语言环境写入。您需要通过一些检查值的测试来检查读取是否成功null(因为该值表示错误)。像这样:

<script src="globalize.js"></script>
<script src="globalize.cultures.js"></script>
<script>
var monthString = 'sep.'; // replace by code that extracts the string
var lang = 'ro';          // replace by code that picks up the right language
var month = Globalize.parseDate(monthString, 'MMM', lang);
if(month) {
  document.write(Globalize.format(month, 'MMM', 'en'));
} else {
  alert('Unrecognized month: ' + monthString);
}

这仅解析月份的缩写,或月份的“短名称”。

问题在于文化内部的差异。例如,对于罗马尼亚语,九月的简称是“sep”。在Globalize.js 数据中(主要基于 .NET 数据;Datejs 在这里可能基于相同的数据)但“sept.” 在CLDR数据中,您的示例提到了“设置”!

Globalize.js 读取名称时不区分大小写,但否则它会在其语言环境定义中使用确切的字符串(例如,如果定义为“sep.”,则“sep”不会执行)。有多种解决方法。最简单的是,编辑 Globalize.js 中的语言环境定义以匹配您的数据中使用的那些。或者,您可以创建具有不同月份名称的备用语言环境(变体),如果它不根据基本语言环境进行解析,则使用它来解析名称。因此,这是一种允许在输入时为一种语言设置不同月份名称的方法。

当然,如果只是将不同语言的短月份名称映射成英文的问题,您可以直接为其编写代码。但是您仍然需要将名称从某处获取到您的对象中——来自 .NET、来自 CLDR 或来自您的实际数据。

于 2012-09-26T07:05:20.257 回答
0

早在 2013 年,我就偶然发现了这个困难,并且确实开发了一个小型实用程序来解决这个问题。

我昨天发布了我的 v3:https ://framagit.org/Siltaar/month_nb

它支持 69 种语言,您无需知道月份名称的语言即可获得它的编号。它基于数据的可重用独立 JSON 树结构和查找结果的小型树遍历循环。

要使用它,只需在网页中包含数据和 tree-walker 文件:

<script src="month_nb_json.js" type="text/javascript"></script>
<script src="month_nb.js" type="text/javascript"></script>

然后你就可以使用它了:

>> month_nb('août');
8

这是我的 Meta-Press.es 项目的一部分,该项目获得了一些资金,并且我将至少在接下来的 6 年内继续工作(从 2013 年开始……)。

否则,它存在https://github.com/datejs/Datejs,这是一种人工翻译方法。

于 2019-09-19T11:21:42.203 回答