Moment.js dilini nasıl değiştiririm?


198

Moment.js tarafından ayarlanan tarihin dilini değiştirmeye çalışıyorum. Varsayılan olan İngilizce'dir, ancak Almanca dilini ayarlamak istiyorum. Ben denedim bunlar:

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

Veriyor NaN.

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

Bu tepki bile vermiyor.

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

Değişiklik yok: bu hala İngilizce bir sonuç üretiyor.

Bu nasıl mümkün olabilir?


Yanıtlar:


305

Moment.lang dosyasına ihtiyacınız var ( UYARI : lang()andan beri kullanımdan kaldırıldı 2.8.0, locale()bunun yerine kullanın):

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

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


V2.8.1 itibariyle moment.locale('de'), yerelleştirmeyi ayarlar, ancak döndürmez a moment. Bazı örnekler:

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'

Özetle locale, global çağrılması momentgelecekteki tüm momentörnekler için yerel ayarı belirler , ancak bir örneğini döndürmez moment. localeBir örneği çağırmak , o örnek için ayarlar VE bu örneği döndürür.

Ayrıca, Shiv'un yorumlarda söylediği gibi, "moment.min.js" değil "moment-with-locales.min.js" kullandığınızdan emin olun, aksi takdirde çalışmaz.


1
Dokümanlarda, bunu yaparak dile özgü an örnekleri oluşturabilirsiniz. Önce biçimlendirirseniz, dil işlemez. Alternatif olarak, senaryonuz boyunca an yerine bir şey yapabilir var deMoment = moment(); deMoment.lang('de')ve yeniden kullanabilirsiniz deMoment.
13'te kalley

34
"Moment.min.js" kullanırsanız çalışmaz; "moment-with-locales.min.js" gerekir
Shiv

2
güncelleme: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
Bu alışkanlık işe yaramayacak şekilde başka bir dil ithal etmek gerekir: import moment from 'moment'; import localization from 'moment/locale/de' moment().locale("de", localization).format('LLL')
Blue Bot

2
'an / dak / yerlilerle an' dan içe aktarma anı;
leojnxs

169

Dili de almak zorunda kaldım:

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

O zaman anı normalde yaptığınız gibi kullanın

alert(moment(date).fromNow())

15
Diğerinden daha fazla yardımcı Cevabınız hakkında söz ettik çünküimport 'moment/locale/es'
Artem Solovev

4
Evet bu doğru cevap ... Teşekkürler, neden işe yaramadığını merak ederek saçımı çekiyordum. Ancak bu, kullanılabilecek herhangi bir dil türü için içe aktarılması gereken gerçek bir acıdır. Daha iyi bir yol olmalı.
Maniaque

1
Belirli bir yerel ayarın içe aktarıldığını açıkladığınız için teşekkür ederiz.
Fernando León

Belgelere göre birisi tüm yerel ayarların dahil edilmesini istiyorsa bunu kullanabilir require("moment/min/locales.min");veya içe import 'moment/min/locales.min'
aktarmayı

Teşekkürler, tam olarak ihtiyacım olan şey
Davide P.

54

En hızlı yöntem: Bower ile yükleyin

Bower ile anı kurdum ve de.jshtml projemde javascript kaynağı olarak bağlandım .

bower install moment --save

Ayrıca manuel olarak moment.jsvede.js .

Projenize 'de.js'yi bağlayın

Bağlanıyor de.js benim ana proje dosyasında otomatik an sınıfı ve onun yöntemlerine tüm erişimler için yerel değiştirdi.

Orada olacak hiçbir artık gerek bir yapmak moment.locale("de").veya moment.lang("de"). kaynak kodunda.

İstediğiniz yerel ayarı aşağıdaki gibi bağlamanız yeterlidir:

<script src="/bower_components/moment/moment.js"></script>
<script src="/bower_components/moment/locale/de.js"></script>

Veya bower_componentsmoment.js 1990ies stilini sağ tıklama ile indirdiyseniz, çoğu senaryoda hala iyi çalışan kütüphaneleri yol olmadan bağlayabilirsiniz .


2
Bu doğru cevap olmalı. Sadece istenen yerel ile bağlantı <script src="/bower_components/moment/locale/de.js"></script>. Şu anda benim için çalışıyor.
mles

8
Msgstr "Artık kaynak kodda moment.locale (" de "). Veya moment.lang (" de "). Bunun yerel ayarları değiştiren dinamik uygulamalar için hala yararlı olduğunu düşünüyorum. Teorik olarak, uygulamamdaki yerel ayarı, açısal uygulamamdaki bir dil / ülke açılır menüsü aracılığıyla değiştirebilir ve daha sonra moment, dinamik olarak, moment.locale ($ lang) ile düşündüğüm formatları değiştirmelidir
armyofda12mnkeys

Elbette, yine de testlerimde javascript dosyasını index.html dosyasına yüklemeniz gerekiyor. Bu hala Mayıs 2017'de bir konudur, belki de bunu dokümanlarına dahil etmelidir.
Steve K

37

Momentjs 2.8+ ile aşağıdakileri yapın:

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

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


Bu gerektiğini çalışmak; nerede çalışmadığına dair bir örnek verebilir misiniz, ayrıca anı nasıl kullanıyorsunuz (npm ile kurdunuz, vb.)?
omninonsense

4
Son anlarda (2.18.1'de test ettim) bunu kullanın: moment.locale ("de"); var m = moment (). formatı ("LLL")
apadana

1
apadana doğrudur: ile yerel ayarı belirlersiniz moment.locale('de')ve şimdiye kadar olan tarihi temsil eden yeni bir nesne moment()yaratırsınız (parantez not edin) ve sonra format('LLL'). Parantez önemlidir. 2.20'de test edilmiştir. Ayrıca, kullanmayı unutmayın moment-with-locale.jsve gerekirse adını değiştirin moment.js. Django moment-with-locale.jsbenim durumumu yüklemeyi reddediyor .
WesternGun

1
bu çalışmıyorsa, bunu deneyin: moment().locale('de').format('LLL');
Anthony Kal

Bu bir coorect, sadece kullanmak istediğiniz yerel ayarı almayı unutmayın (bkz. Agu Dondo'nun cevabı).
Jeroen Crevits

13

Eklemeniz gerekir moment.lang(navigator.language)Senaryonuzu .

Ayrıca, görüntülemek istediğiniz her ülke yerel ayarını da eklemeniz gerekir: örneğin GB veya FR için, moment.js kitaplığına bu yerel ayar biçimini eklemeniz gerekir. Bu biçimin bir örneği momentjs belgelerinde mevcuttur. Moment.js'de bu biçimi eklemezseniz, şu anda gördüğüm tek kişi olduğu için HER ZAMAN ABD yerel ayarını seçer.


tarayıcıları 'en' içindeyse ve 'es' de okuyorlarsa o zaman sadece 'en' 'de saati gösterecektir
Rus Peter

12

2017/2018 sonu: Anothers yanıtlarının düzenlenemeyecek kadar eski bir kodu var, bu yüzden burada alternatif temiz cevabım:

ihtiyaç ile

let moment = require('moment');
require('moment/locale/fr.js');
// or if you want to include all locales:
require("moment/min/locales.min");

ithalatla

import moment from 'moment';
import 'moment/locale/fr';
// or if you want to include all locales:
require("moment/min/locales.min");

kullanın:

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

saat dilimi ile

* Gerektirir:

require('moment-range');
require('moment-timezone');

*ithalat:

import 'moment-range';
import 'moment-timezone';

kullanım bölgeleri:

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");

tarihi biçimlendirme işlevi

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

Benim için işe import moment from 'moment/min/moment-with-locales';
yarayan

@leojnxs evet, tüm yerel ayarları dahil etmek istiyorsanız, ancak her dil için bir içe aktarma yapan yalnızca bir veya daha fazla belirli yerel
ayarla

6

METRE KULLANICILARI İÇİN:

an yerel ayarları meteor'da varsayılan olarak yüklenmezse, yalnızca varsayılan yüklemeyle 'en' yerel ayarını alırsınız.

Yani kodu diğer yanıtlarda doğru şekilde gösterildiği gibi kullanırsınız:

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

ancak ihtiyacınız olan yerel ayarı yükleyene kadar İngilizce olarak kalacaktır.

Meteor'da an için yerel ayar eklemenin güzel ve temiz bir yolu var ( rzymek tarafından sağlanmıştır) ) .

Yükleme an her zamanki meteor yolu ile paketi:

meteor add rzymek:moment

Ardından, ihtiyacınız olan yerel ayarları ekleyin, örn. İtalyanca için:

meteor add rzymek:moment-locale-it

Veya gerçekten kullanılabilir tüm yerel ayarları eklemek istiyorsanız (sayfanıza yaklaşık 30 bin kişi ekler):

meteor add rzymek:moment-locales

@AntonAL Bana yorumunu gönderdiğin iyi bir şey, sorunun aslında meteor için olmadığını fark ettim. Ancak cevabımın oldukça kullanışlı olduğunu düşünüyorum. Cevabımı bunu yansıtacak şekilde düzenledim.
mwarren

Teşekkürler! Eklendi rzymek:moment-locale-deve işe yaradı :)
nooitaf

4

2.18.1 ve sonrası ile:

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

2
Yerel dosyaları içermelidir, aksi takdirde çalışmaz.
zeleven

2
İlişkili özel moment yerel ayar modülü de içe aktarılmadığı sürece, bunun zaten çalışmadığı belirtildi.
Maniat

@Maniaque Özel bir şey yüklemedim sadece npm install --save an ve iyi çalışıyor
fedeteka

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>

gösteri


3

Ben yudum ve arkadaşları ile webpack kullanırken ( bu jeneratör benim için her şeyi kurdu) bower.json dosyasında bir değişiklik yapmak zorunda kaldı. An paketi için varsayılan alma geçersiz kılmak ve tüm dillerle gelen dosyayı seçmek zorunda kaldı:

"overrides": {
  "moment": {
    "main": [
        "min/moment-with-locales.min.js"
    ]
  }
}

Bu benim tam bower.json dosyam:

{
  "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"
  }
}

Bundan sonra, bir tarih çıkmadan önce hala yerel ayarı bildirmeniz / ayarlamanız gerekir, değil mi?
NikZ

Tabii :) Bu sadece çevrilmiş cümleleri mevcut olmasını sağlar böylece başka bir dile (anında) geçiş yapabilirsiniz
GameScripting

3

Angular2-moment kullanıyorum, ancak kullanım benzer olmalı.

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

export class AppModule {

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

3

Js dilini Sürüme göre değiştirin

Sürüm: 2.8+

moment.locale ( 'yüksek');

Sürüm: 2.5.1

moment.lang ( 'Hi');


3

böyle iyi çalış: return moment(status.created_at).locale('es').fromNow();


2
Bu kod soruyu cevaplayabilirken, sorunun nasıl ve / veya neden çözüldüğüne ilişkin ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
Badacadabra

3

Neyin değiştiğinden emin değilim ama bunun gibi dil dosyasını içe aktarmak benim için çalıştı

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

İçe aktarma ifadesindeki src'ye dikkat edin


2

için momentjs 2.12+ aşağıdakileri yapın:

moment.updateLocale('de');

Ayrıca moment.updateLocale(localeName, config), varolan bir yerel ayarı değiştirmek için kullanmanız gerektiğini unutmayın . moment.defineLocale(localeName, config)yalnızca yeni bir yerel ayar oluşturmak için kullanılmalıdır.


2

Benim için bazı değişiklikler var (ver. 2.20)

  1. Yerel ayarı ile ayarladınız moment.locale('de')ve şimdiye kadar olan tarihi temsil eden yeni bir nesne oluşturuyorsunuz moment()(parantez not edin) ve sonra format('LLL'). Parantez önemlidir.

Yani bu şu anlama gelir:

moment.locale('de');
var now = moment();
now.format('LLL');
  1. Ayrıca, kullanmayı unutmayın moment-with-locale.js. Dosya tüm yerel ayarları içerir ve daha büyük bir dosya boyutuna sahiptir. localeKlasörü indirmek yeterli değil. Gerekirse, adı değiştirin moment.js. Django moment-with-locale.jsbenim durumumu yüklemeyi reddediyor .

EDIT: Dosyayı yeniden adlandırmanın gerekli olmadığı ortaya çıktı. Ben sadece Django yükleme gerekli olduğunu düşünmüyor bu yüzden sayfada çağırmak unuttum, bu yüzden benim hatam.


2

Bu yalnızca geçerli kullanıcı konumunu otomatik olarak algılayarak çalışır.

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

Whoops kalemin kayması. Bunu çözerdim: var moment = function(x) { return moment(x).locale('de'); }Diğer yollar gerçekten koşullar altında (benim için) yapışıyor / tutmuyor gibi görünüyor.


0

Eşzamansız ortamlarda çalışanlar için, moment , isteğe bağlı yerel ayarları yüklerken beklenmedik şekilde davranır.

Onun yerine

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

siparişi ters çevir

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

Yerel ayarlar, seçilen yerel ayara yüklenmiş ve daha önce ayarlanmış yerel ayarları geçersiz kılmış gibi görünüyor. Bu nedenle önce yerel ayarı değiştirmek, ardından yerel ayar bilgilerini yüklemek bu soruna neden olmaz.


0

Mücadeleden sonra, bu benim için momentv2.26.0 için çalıştı:

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

İçeri girebilirsin en, frya daes . Başka bir dil istiyorsanız, yerel ayarı içe aktarmanız ve diziye eklemeniz gerekir.

Yalnızca bir dili desteklemeniz gerekiyorsa, bu biraz daha basittir:

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>
  );
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.