Как конвертировать иностранный месяц в строку даты в английский
Приведенный ниже ответ в другой ветке, кажется, положил начало тому, что мне нужно, но у меня возникли трудности с его реализацией.
Лучшая библиотека для этой цели, вероятно, будет 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 или из ваших реальных данных.