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

Ответ 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)

  1. Вы устанавливаете locale с помощью moment.locale('de'), и вы создаете новый объект, представляющий дату сейчас по moment() (обратите внимание на круглые скобки), а затем format('LLL') ее. Скобка важна.

Так что это означает:

moment.locale('de');
var now = moment();
now.format('LLL');
  1. Также не забывайте использовать 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'); } Остальные способы действительно не прилипают/удерживаются в условиях (для меня).