Как конвертировать иностранный месяц в строку даты в английский

Приведенный ниже ответ в другой ветке, кажется, положил начало тому, что мне нужно, но у меня возникли трудности с его реализацией.

Лучшая библиотека для этой цели, вероятно, будет Globalize. Он позволяет вам указать локаль (она называется культурой, но на самом деле она та же самая), формат (встроенный или ваш) и фактический анализ строки на заданную дату:

var dateString = "Lunes, 29 августа 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 месяцев, а не только один в приведенной выше строке) с иностранного языка на английский.

Любая скорейшая помощь была бы наиболее ценной, чтобы я мог снова запустить и запустить свой сайт на полной скорости.

Если вам нужна дополнительная информация от меня, пожалуйста, спросите:)

С уважением Росс

@ Юкка К. Корпела

У меня есть это:

<!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/", пожалуйста, помогите:)

2 ответа

Я думаю, вы могли бы использовать datejs для вашей цели. Он способен анализировать данные даты на любом доступном языке (150+ в качестве штата) через файл культуры, а затем сохранять их на английском или любом другом языке, который вы пожелаете.

Посмотрите: http://code.google.com/p/datejs/

Я столкнулся с этой проблемой еще в 2013 году и поработал над небольшой утилитой для решения этой проблемы.

Вчера я опубликовал свой v3: https://framagit.org/Siltaar/month_nb

Он поддерживает 69 языков, и вам не нужно знать язык названия месяца, чтобы узнать его номер. Он основан на многократно используемой автономной древовидной структуре JSON для данных и небольшом цикле обхода дерева для поиска результатов.

Чтобы использовать его, просто включите на веб-страницу и данные, и файлы обходчика дерева:

<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, который представляет собой подход к переводу, внесенный человеком.

Способ сделать такие вещи в 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);
}

Это анализирует только сокращение месяца или "короткое имя" месяца.

Проблема в вариациях внутри культур. Например, для румынского языка короткое имя "сентябрь" в данных Globalize.js (в основном, на основе данных.NET; вероятно, Datejs здесь основан на тех же данных), но "сент." В данных CLDR, и Ваш пример упоминает "Set"!

Globalize.js читает имена без учета регистра, но в противном случае он использует точную строку в своих определениях локали (например, "sep" не сработает, если определение говорит "sep."). Есть разные способы обойти это. Проще всего, отредактируйте определения локали в Globalize.js, чтобы они соответствовали тем, которые используются в ваших данных. Кроме того, вы можете создать альтернативную локаль (вариант) с разными названиями месяцев и проанализировать имя, используя его, если оно не анализируется в соответствии с базовой локалью. Так что это способ разрешить при вводе разные наборы названий месяцев для языка.

Конечно, если речь идет только о сопоставлении коротких названий месяцев с разных языков на английском языке, вы можете просто написать код для него напрямую. Но вам все равно придется получать имена в ваших объектах откуда-то - из.NET, из CLDR или из ваших реальных данных.

Другие вопросы по тегам