moment.js의 언어를 어떻게 변경합니까?


198

moment.js에 의해 설정된 날짜의 언어를 변경하려고합니다. 기본 언어는 영어이지만 독일어를 설정하고 싶습니다. 이것들은 내가 시도한 것입니다 :

var now = moment().format("LLL").lang("de");

주고 NaN있습니다.

var now = moment("de").format("LLL");

이것은 심지어 반응하지 않습니다.

var now = moment().format("LLL", "de");

변경 사항 없음 : 여전히 영어로 결과가 생성됩니다.

이것이 어떻게 가능한지?


답변:


305

(당신은 moment.lang 필요 경고가 : lang()순간부터 사용되지 않으며 2.8.0, 사용 locale()대신) :

moment.lang("de").format('LLL');

http://momentjs.com/docs/#/i18n/


v2.8.1부터는 moment.locale('de')현지화를 설정하지만 a를 반환하지는 않습니다 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인스턴스를 호출 하면 해당 인스턴스에 대해 설정되고 해당 인스턴스를 반환합니다.

또한 Shiv가 의견에서 말했듯이 "moment.min.js"가 아닌 "moment-with-locales.min.js"를 사용해야합니다. 그렇지 않으면 작동하지 않습니다.


1
문서에서이를 수행하여 언어 별 순간 인스턴스를 만들 수 있습니다. 먼저 서식을 지정하면 언어가 처리되지 않습니다. 또는 스크립트 전체에서 순간 대신 비슷한 작업을 수행 var deMoment = moment(); deMoment.lang('de')하고 재사용 할 수 deMoment있습니다.
kalley

34
"moment.min.js"를 사용하면 작동하지 않습니다. "moment-with-locales.min.js"가 필요
Shiv

2
업데이트 :Deprecation warning: moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages. Arguments: fr
Abdelouahab

8
원하는 언어를 다른 현명하게 가져와야 작동하지 않습니다. import moment from 'moment'; import localization from 'moment/locale/de' moment().locale("de", localization).format('LLL')
Blue Bot

2
'moment / min / moment-with-locales'에서 가져 오기 모멘트;
leojnxs

169

나는 언어도 가져와야했다.

import moment from 'moment'
import 'moment/locale/es'  // without this line it didn't work
moment.locale('es')

그런 다음 평소처럼 순간을 사용하십시오

alert(moment(date).fromNow())

15
당신이 언급 한 다른 답변보다 더 도움이됩니다import 'moment/locale/es'
Artem Solovev

4
예, 이것이 정답입니다 ... 고마워요, 왜 작동하지 않는지 궁금해 머리카락을 뽑았습니다. 그러나 이것은 사용될 수있는 모든 언어 유형에 대해 가져와야하는 진짜 고통입니다. 더 좋은 방법이 있어야합니다.
Maniaque

1
특정 로케일 가져 오기를 설명해 주셔서 감사합니다.
Fernando León

문서에 따르면 누군가가 모든 로케일을 포함 require("moment/min/locales.min");시키 려면 이것을 사용 하거나 가져 오기를 사용할 수 있습니다import 'moment/min/locales.min'
kamran

감사합니다. 정확히 필요한 것
Davide P.

54

가장 빠른 방법 : Bower로 설치

방금 bower로 순간을 설치 de.js하고 내 HTML 프로젝트에서 javascript 리소스로 연결 했습니다.

bower install moment --save

또한 수동으로 다운로드 할 수 있습니다 moment.jsde.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 스타일을 다운로드 한 경우 경로 없이 라이브러리를 링크 할 수 있습니다. 이는 대부분의 시나리오에서 여전히 잘 작동합니다.


2
이것이 정답이어야합니다. 원하는 지역을 (으)와 연결하기 만하면됩니다 <script src="/bower_components/moment/locale/de.js"></script>.
mles

8
"소스 코드에서 더 이상 moment.locale ("de "). 또는 moment.lang ("de ").을 (를) 수행 할 필요가 없습니다." 로케일을 변경하는 동적 앱에 여전히 유용하다고 생각합니다. 당신은 이론적으로 내 각 응용 프로그램에 LANG / 국가 드롭 다운 메뉴를 통해 내 애플 리케이션에 로케일을 변경할 수 있습니다 다음 순간 동적으로 형식을 변경해야합니다 같이하는 내가 moment.locale ($ LANG)로 생각 할 것
armyofda12mnkeys

물론, 여전히 테스트에서 index.html에 javascript 파일을로드해야합니다. 이것은 2017 년 5 월 여전히 문제이며, 아마도 문서에 이것을 포함시켜야 할 수도 있습니다.
Steve K

37

momentjs 2.8 이상으로 다음을 수행하십시오.

moment.locale("de").format('LLL');

http://momentjs.com/docs/#/i18n/


그것은 해야 작동; 작동하지 않는 위치의 예를 제공하고 순간을 어떻게 사용하고 있습니까 (npm을 통해 설치했는지 등)?
omninonsense

4
최근 순간 (2.18.1에서 테스트 됨)으로 이것을 사용하십시오 : moment.locale ( "de"); var m = moment (). format ( "LLL")
apadana

1
apadana가 옳습니다 : 로케일을 설정 moment.locale('de')하고 날짜를 moment()괄호로 묶은 다음 날짜를 나타내는 새 객체를 만듭니다 format('LLL'). 괄호가 중요합니다. 2.20에서 테스트되었습니다. 또한 사용 moment-with-locale.js하고 필요하면 이름을로 변경하십시오 moment.js. 장고 moment-with-locale.js는 내 경우 에로드 를 거부합니다 .
WesternGun

1
이것이 작동하지 않으면 다음을 시도하십시오. moment().locale('de').format('LLL');
Anthony Kal

이것은 coorect입니다. 사용하려는 로케일을 가져 오는 것을 잊지 마십시오 (Agu Dondo의 답변 참조).
Jeroen Crevits

13

moment.lang(navigator.language)스크립트 를 추가해야합니다 .

또한 표시하려는 각 국가 로캘을 추가해야합니다. 예를 들어 GB 또는 FR의 경우 해당 로캘 형식을 moment.js 라이브러리에 추가해야합니다. 그러한 형식의 예는 momentjs 문서에서 사용할 수 있습니다. moment.js에이 형식을 추가하지 않으면 항상 현재 보이는 유일한 로케일이므로 항상 미국 로케일을 선택합니다.


브라우저가 'en'이고 'es'로 읽는 경우 'en'의 시간 만 표시됩니다
Peter the Russian

12

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
  }  
};

나를 위해 일한 유일한 것은 다음과 같이 순간 수입을 바꾸는 것입니다.import moment from 'moment/min/moment-with-locales';
leojnxs

@leojnxs 예, 모든 로케일을 포함하려면 모든 언어에 대해 가져 오기를 수행하는 하나 이상의 특정 로케일 만 사용할 수 있습니다.
stackdave

6

유성 사용자 :

moment 로케일은 meteor에 기본적으로 설치되지 않으며 기본 설치로 'en'로케일 만 얻습니다.

따라서 다른 답변에서 올바르게 표시된 코드를 사용하십시오.

moment.locale('it').format('LLL');

필요한 로케일을 설치할 때까지 영어로 유지됩니다.

유성 에 순간 마다 개별 로케일을 추가하는 훌륭하고 깨끗한 방법이 있습니다 ( rzymek 제공 ).

다음과 같이 일반적인 유성 방식으로 모멘트 패키지를 설치하십시오 .

meteor add rzymek:moment

그런 다음 이탈리아어와 같이 필요한 로케일을 추가하십시오.

meteor add rzymek:moment-locale-it

또는 사용 가능한 로케일을 모두 추가하려면 (페이지에 약 30k 추가) :

meteor add rzymek:moment-locales

@AntonAL 당신이 저에게 당신의 의견을 보냈습니다, 나는 그 질문이 실제로 유성이 아니라는 것을 알아 차 렸습니다. 그러나 내 대답은 꽤 유용합니다. 이것을 반영하기 위해 답변을 편집했습니다.
mwarren

감사! 추가 rzymek:moment-locale-de및 작동 :)
nooitaf

4

순간 2.18.1 이상 :

  moment.locale("de");
  var m = moment().format("LLL")

2
로케일 파일을 포함해야합니다. 그렇지 않으면 작동하지 않습니다.
zeleven

2
연관된 특정 모멘트 로케일 모듈도 가져 오지 않으면 작동하지 않는 것으로 이미 언급되었습니다.
Maniaque

@Maniaque 난 그냥 아무것도 npm 설치를 설치하지 않았다
저장

3
<!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>

데모


3

gulp 및 친구들과 함께 webpack을 사용하면서 ( 이 생성기 가 나를 위해 모든 것을 설정했습니다) 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"
  }
}

그 후에도 날짜를 출력하기 전에 모멘트 로캘을 선언 / 설정해야합니다.
NikZ

물론 :) 이렇게하면 번역 된 구문을 사용할 수 있으므로 다른 언어로 즉시 전환 할 수 있습니다.
GameScripting

3

angular2-moment를 사용하고 있지만 사용법은 비슷해야합니다.

import { MomentModule } from "angular2-moment";
import moment = require("moment");

export class AppModule {

  constructor() {
    moment.locale('ru');
  }
}

3

버전에 따라 모멘트 js 언어 변경

버전 : 2.8+

moment.locale ( 'hi');

버전 : 2.5.1

moment.lang ( 'hi');


3

그런 식으로 잘 작동하십시오. return moment(status.created_at).locale('es').fromNow();


2
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
Badacadabra 2016 년

3

무엇이 바뀌 었는지 확실하지 않지만 이와 같은 언어 파일을 가져 오는 것이 저에게 효과적이었습니다.

import 'moment/src/locale/fr';
moment.locale('fr)

import 문에서 src를 확인하십시오.


2

대한 momentjs 2.12+ , 다음을 수행 :

moment.updateLocale('de');

또한 moment.updateLocale(localeName, config)기존 로케일을 변경하는 데 사용해야 합니다. moment.defineLocale(localeName, config)새 로캘을 만드는 데만 사용해야합니다.


2

나에게는 약간의 변화가 있습니다 (ver. 2.20)

  1. 로케일을 설정 moment.locale('de')하고 현재 날짜 moment()(괄호 참조)를 나타내는 새 객체를 만든 다음 객체를 만듭니다 format('LLL'). 괄호가 중요합니다.

따라서 다음을 의미합니다.

moment.locale('de');
var now = moment();
now.format('LLL');
  1. 또한을 사용해야 moment-with-locale.js합니다. 파일에는 모든 로캘 정보가 포함되며 파일 크기가 더 큽니다. 다운로드 locale폴더 충분하지 않습니다. 필요한 경우 이름을로 변경하십시오 moment.js. 장고 moment-with-locale.js는 내 경우 에로드 를 거부합니다 .

편집 : 파일 이름을 바꿀 필요가 없다는 것이 밝혀졌습니다. Django가 페이지를로드하는 것이 필요하지 않다고 생각하므로 페이지에서 호출하는 것을 잊었습니다.


2

이것은 현재 사용자 위치를 자동 감지하여 작동합니다.

import moment from "moment/min/moment-with-locales";

// Then use it as you always do. 
moment(yourDate).format("MMMM Do YYYY, h:mm a")

1

펜이 미끄러 져 나는 이것을 해결했다 : var moment = function(x) { return moment(x).locale('de'); }다른 방법은 실제로 (나를 위해) 조건에서 달라 붙지 않는 것처럼 보인다.


0

비동기 환경에서 작업하는 moment경우 필요에 따라 로케일을로드 할 때 예기치 않게 작동합니다.

대신에

await import('moment/locale/en-ca');
moment.locale('en-ca');

순서를 바꾸다

moment.locale('en-ca');
await import('moment/locale/en-ca');

로케일이 현재 선택된 로케일로로드되어 이전에 설정된 로케일 정보를 대체하는 것 같습니다. 따라서 로캘을 먼저 전환 한 다음 로캘 정보를로드해도이 문제가 발생하지 않습니다.


0

어려움을 겪은 후 momentv2.26.0 에서 나에게 도움이되었습니다.

import React from "react";
import moment from "moment";
import frLocale from "moment/locale/fr";
import esLocale from "moment/locale/es";

export default function App() {
  moment.locale('fr', [frLocale, esLocale]) // can pass in 'en', 'fr', or 'es'

  let x = moment("2020-01-01 00:00:01");
  return (
    <div className="App">
      {x.format("LLL")}
      <br />
      {x.fromNow()}
    </div>
  );
}

당신은에 전달할 수 있습니다 en, fr또는 es. 다른 언어를 원한다면 로케일을 가져 와서 배열에 추가해야합니다.

하나의 언어 만 지원해야하는 경우 조금 더 간단합니다.

import React from "react";
import moment from "moment";
import "moment/locale/fr"; //always use French

export default function App() {  
  let x = moment("2020-01-01 00:00:01");
  return (
    <div className="App">
      {x.format("LLL")}
      <br />
      {x.fromNow()}
    </div>
  );
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.