Как мне изменить язык moment.js?
Я пытаюсь изменить язык даты, которая устанавливается моментом. По умолчанию используется английский, но я хочу установить немецкий язык. Вот что я попробовал:
var now = moment().format("LLL").lang("de");
Это дает NaN
.
var now = moment("de").format("LLL");
Это даже не реагирует.
var now = moment().format("LLL", "de");
Без изменений: это все еще дает результат на английском языке.
Как это возможно?
Ответы
Ответ 1
Вам нужен момент .lang(ВНИМАНИЕ: lang()
устарел с момента 2.8.0
, используйте вместо него locale()
):
moment.lang("de").format('LLL');
http://momentjs.com/docs/#/i18n/
Начиная с v2.8.1, moment.locale('de')
устанавливает локализацию, но не возвращает moment
. Некоторые примеры:
var march = moment('2017-03')
console.log(march.format('MMMM')) // 'March'
moment.locale('de') // returns the new locale, in this case 'de'
console.log(march.format('MMMM')) // 'March' still, since the instance was before the locale was set
var deMarch = moment('2017-03')
console.log(deMarch.format('MMMM')) // 'März'
// You can, however, change just the locale of a specific moment
march.locale('es')
console.log(march.format('MMMM')) // 'Marzo'
В итоге, вызов locale
в глобальном moment
устанавливает локаль для всех будущих экземпляров moment
, но не возвращает экземпляр moment
. Вызов locale
для экземпляра, установка его для этого экземпляра и возврат этого экземпляра.
Также, как сказал Шив в комментариях, убедитесь, что вы используете "moment-with-locales.min.js", а не "moment.min.js", иначе это не будет работать.
Ответ 2
Мне пришлось импортировать также язык:
import moment from 'moment'
import 'moment/locale/es' // without this line it didn't work
moment.locale('es')
Тогда используйте момент, как обычно
alert(moment(date).fromNow())
Ответ 3
Самый быстрый способ: установить с помощью Bower
Я только что установил момент с беседкой и связал de.js
как ресурс javascript в моем проекте html.
bower install moment --save
Вы также можете вручную загрузить moment.js
и de.js
.
Ссылка 'de.js' в вашем проекте
Связывание de.js
в моем основном файле проекта автоматически изменило локаль для всех обращений к классу момента и его методам.
Теперь больше не нужно делать moment.locale("de").
или
moment.lang("de").
в исходном коде.
Просто свяжите свой желаемый язык следующим образом:
<script src="/bower_components/moment/moment.js"></script>
<script src="/bower_components/moment/locale/de.js"></script>
Или вы можете связать библиотеки без пути bower_components
, если вы загрузили файл moment.js 1990ies с помощью щелчка правой кнопкой мыши, который по-прежнему отлично работает в большинстве сценариев.
Ответ 4
С моментами 2.8+ сделайте следующее:
moment.locale("de").format('LLL');
http://momentjs.com/docs/#/i18n/
Ответ 5
Вам нужно добавить moment.lang(navigator.language)
в script.
И также необходимо добавить каждую страну, которую вы хотите отобразить: например, для GB или FR, вам нужно добавить этот формат локали в библиотеке moment.js. Пример такого формата доступен в документации momentjs. Если вы не добавите этот формат в moment.js, он ВСЕГДА заберет локализацию США, как единственную, которую я сейчас вижу.
Ответ 6
конец 2017/2018: в чужих ответах слишком много старого кода для редактирования, поэтому вот мой альтернативный чистый ответ:
с требованием
let moment = require('moment');
require('moment/locale/fr.js');
// or if you want to include all locales:
require("moment/min/locales.min");
с импортом
import moment from 'moment';
import 'moment/locale/fr';
// or if you want to include all locales:
require("moment/min/locales.min");
Использование:
moment.locale('fr');
moment().format('D MMM YY'); // Correct, set default global format
// moment.locale('fr').format('D MMM YY') //Wrong old versions for global default format
с часовым поясом
* Требуется:
require('moment-range');
require('moment-timezone');
* импорт:
import 'moment-range';
import 'moment-timezone';
использовать зоны:
const newYork = moment.tz("2014-06-01 12:00", "America/New_York");
const losAngeles = newYork.clone().tz("America/Los_Angeles");
const london = newYork.clone().tz("Europe/London");
функция форматирования даты
const ISOtoDate = function (dateString, format='') {
// if date is not string use conversion:
// value.toLocaleDateString() +' '+ value.toLocaleTimeString();
if ( !dateString ) {
return '';
}
if (format ) {
return moment(dateString).format(format);
} else {
return moment(dateString); // It will use default global format
}
};
Ответ 7
ДЛЯ ПОЛЬЗОВАТЕЛЕЙ METEOR:
момент локали не установлены по умолчанию в meteor, вы получаете только локальную локаль с en по умолчанию.
Итак, вы используете код, как показано правильно, в других ответах:
moment.locale('it').format('LLL');
но он останется на английском, пока вы не установите требуемый язык.
Существует чистый, чистый способ добавления отдельных мест в момент в метеор (поставляется rzymek).
Установите пакет момент в обычном метеорном режиме с помощью:
meteor add rzymek:moment
Затем просто добавьте нужные вам локали, например. для итальянца:
meteor add rzymek:moment-locale-it
Или если вы действительно хотите добавить все доступные локали (добавьте около 30k на свою страницу):
meteor add rzymek:moment-locales
Ответ 8
С моментом 2.18.1 и далее:
moment.locale("de");
var m = moment().format("LLL")
Ответ 9
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MomentJS</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script type="text/javascript" src="moment.js"></script>
<script type="text/javascript" src="locale/ne.js"></script>
</head>
<body>
<script>
jQuery(document).ready(function($) {
moment.locale('en'); // default the locale to English
var localLocale = moment();
moment.locale('ne'); // change the global locale to Nepalese
var ne1 = localLocale.format('LLLL');
var ne2 = moment().format('LLLL');
$('.ne1').text(ne1);
$('.ne2').text(ne2);
});
</script>
<p class="ne1"></p>
<p class="ne2"></p>
</body>
</html>
Демо
Ответ 10
Как я использовал webpack с gulp и друзьями (этот генератор настраивал все для меня) Мне пришлось внести изменения в файл bower.json. Мне пришлось переопределить импорт по умолчанию для пакета момента и выбрать файл, который поставляется со всеми языками:
"overrides": {
"moment": {
"main": [
"min/moment-with-locales.min.js"
]
}
}
Это мой полный файл bower.json:
{
"name": "html5",
"version": "0.0.0",
"dependencies": {
"angular-animate": "~1.4.2",
"angular-cookies": "~1.4.2",
"angular-touch": "~1.4.2",
"angular-sanitize": "~1.4.2",
"angular-messages": "~1.4.2",
"angular-ui-router": "~0.2.15",
"bootstrap-sass": "~3.3.5",
"angular-bootstrap": "~0.13.4",
"malarkey": "yuanqing/malarkey#~1.3.1",
"angular-toastr": "~1.5.0",
"moment": "~2.10.6",
"animate.css": "~3.4.0",
"angular": "~1.4.2",
"lodash": "^4.13.1",
"angular-moment": "^0.10.3",
"angularLocalStorage": "ngStorage#^0.3.2",
"ngstorage": "^0.3.10"
},
"devDependencies": {
"angular-mocks": "~1.4.2"
},
"overrides": {
"bootstrap-sass": {
"main": [
"assets/stylesheets/_bootstrap.scss",
"assets/fonts/bootstrap/glyphicons-halflings-regular.eot",
"assets/fonts/bootstrap/glyphicons-halflings-regular.svg",
"assets/fonts/bootstrap/glyphicons-halflings-regular.ttf",
"assets/fonts/bootstrap/glyphicons-halflings-regular.woff",
"assets/fonts/bootstrap/glyphicons-halflings-regular.woff2"
]
},
"moment": {
"main": [
"min/moment-with-locales.min.js"
]
}
},
"resolutions": {
"angular": "~1.4.2"
}
}
Ответ 11
Я использую angular2 -moment, но использование должно быть схожим.
import { MomentModule } from "angular2-moment";
import moment = require("moment");
export class AppModule {
constructor() {
moment.locale('ru');
}
}
Ответ 12
Измените язык js в соответствии с версией
Версия: 2.8 +
moment.locale( 'Привет');
Версия: 2.5.1
moment.lang( 'Привет');
Ответ 13
работает так: return moment(status.created_at).locale('es').fromNow();
Ответ 14
Для меня есть некоторые изменения, которые нужно сделать (версия 2.20)
- Вы устанавливаете locale с помощью
moment.locale('de')
, и вы создаете новый объект, представляющий дату сейчас по moment()
(обратите внимание на круглые скобки), а затем format('LLL')
ее. Скобка важна.
Так что это означает:
moment.locale('de');
var now = moment();
now.format('LLL');
- Также не забывайте использовать
moment-with-locale.js
. Файл содержит всю информацию о локали и имеет больший размер файла. Скачать папку locale
недостаточно. При необходимости измените имя на moment.js
. Django просто отказывается загружать moment-with-locale.js
в моем случае.
РЕДАКТИРОВАТЬ: Оказалось, что переименование файла не является необходимым. Я просто забыл вызвать его на странице, поэтому Django не считает, что загрузка необходима, поэтому я виноват.
Ответ 15
для momentjs 2.12 +, выполните следующие действия:
moment.updateLocale('de');
Также обратите внимание, что вы должны использовать moment.updateLocale(localeName, config)
для изменения существующей локали. moment.defineLocale(localeName, config)
следует использовать только для создания новой локали.
Ответ 16
Убирает ручку. Я бы решил:
var moment = function(x) { return moment(x).locale('de'); }
Остальные способы действительно не прилипают/удерживаются в условиях (для меня).