मैं पल की भाषा कैसे बदल सकता हूँ।


196

मैं उस तारीख की भाषा को बदलने की कोशिश कर रहा हूं जो क्षण भर में सेट हो रही है। js डिफ़ॉल्ट एक अंग्रेजी है, लेकिन मैं जर्मन भाषा सेट करना चाहता हूं। ये वही है जो मैंने कोशिश की:

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

दे रहा है NaN

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

यह भी प्रतिक्रिया नहीं है।

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

कोई परिवर्तन नहीं: यह अभी भी अंग्रेजी में एक परिणाम का उत्पादन कर रहा है।

यह कैसे हो सकता है?


जवाबों:


305

आपको क्षण की आवश्यकता है। तरंग ( चेतावनी : 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उदाहरणों के लिए स्थान निर्धारित करती है , लेकिन इसका उदाहरण नहीं देती है momentlocaleएक उदाहरण पर कॉल करना, इसे उस उदाहरण के लिए सेट करता है और उस उदाहरण को लौटाता है।

इसके अलावा, जैसा कि शिव ने टिप्पणी में कहा है, सुनिश्चित करें कि आप "क्षण-दर-स्थान ।min.js" का उपयोग करते हैं और "क्षण.मिन.ज" नहीं, अन्यथा यह काम नहीं करेगा।


1
डॉक्स में, आप ऐसा करके भाषा के विशिष्ट उदाहरण बना सकते हैं। यदि आप पहले प्रारूपित करते हैं, तो भाषा प्रक्रिया नहीं करेगी। वैकल्पिक रूप से, आप अपनी स्क्रिप्ट के दौरान क्षण के बजाय कुछ ऐसा कर सकते हैं var deMoment = moment(); deMoment.lang('de')और पुन: उपयोग कर सकते हैं deMoment
कलली

33
यदि आप "moment.min.js" का उपयोग करते हैं तो यह काम नहीं करेगा; आपको "क्षण-दर-स्थान-स्थान .min.js" चाहिए
शिव

2
अद्यतन:Deprecation warning: moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages. Arguments: fr
अब्देलौहाब

8
आपको इस अभ्यस्त काम के लिए वांछित अन्य भाषा को आयात करने की आवश्यकता है: import moment from 'moment'; import localization from 'moment/locale/de' moment().locale("de", localization).format('LLL')
ब्लू बॉट

2
'पल / मिनट / पल-साथ-स्थानों' से आयात पल;
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
हाँ, यह सही उत्तर है ... धन्यवाद, मैं अपने बाल खींच रहा था यह सोचकर कि यह काम क्यों नहीं कर रहा है। लेकिन यह एक वास्तविक दर्द है जिसका उपयोग किसी भी भाषा प्रकार के लिए आयात किया जा सकता है। कोई बेहतर तरीका ज़रूर होगा।
उन्माद

1
विशिष्ट लोकेल के आयात के लिए धन्यवाद।
फर्नांडो लियोन

प्रलेखन के अनुसार यदि कोई चाहता है कि सभी स्थानों को शामिल किया जाए तो वह / वह इसका उपयोग कर सकता है require("moment/min/locales.min");या आयात का उपयोग कर सकता हैimport 'moment/min/locales.min'
कामरान

धन्यवाद, वास्तव में मुझे क्या चाहिए
डेविड पी।

55

सबसे तेज़ विधि: बोवर के साथ स्थापित करें

मैंने अभी bower के साथ क्षण संस्थापित किया और de.jsअपने 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पथ के बिना पुस्तकालयों को लिंक कर सकते हैं , यदि आपने क्षण-क्लिक 1990 के दशक की शैली को राइट-क्लिक के माध्यम से डाउनलोड किया है, जो अभी भी अधिकांश परिदृश्यों में ठीक काम करता है।


2
यह सही उत्तर होना चाहिए। बस इच्छित स्थानीय के साथ लिंक करें <script src="/bower_components/moment/locale/de.js"></script>। यह अभी मेरे लिए काम करता है।
mles

8
"सोर्स कोड में एक क्षण (locale) (" de ") या क्षण.lang (" de ") करने के लिए अब कोई आवश्यकता नहीं होगी।" मुझे लगता है कि यह अभी भी डायनामिक ऐप्स के लिए उपयोगी है जो लोकल को बदलते हैं। जैसा आप सैद्धांतिक रूप से स्थान मेरे एप्लिकेशन में एक lang / देश ड्रॉपडाउन के माध्यम से मेरी कोणीय अनुप्रयोग में बदल सकते हैं और फिर पल प्रारूपों गतिशील रूप से परिवर्तित करना चाहिए जो मुझे लगता है मैं moment.locale ($ Lang) के साथ लगता है क्या करना होगा
armyofda12mnkeys

ज़रूर, लेकिन आपको अभी भी मेरे परीक्षणों में जावास्क्रिप्ट फ़ाइल को अपने index.html में लोड करना होगा। मई 2017 में यह अभी भी एक मुद्दा है, हो सकता है कि इस क्षण को उनके डॉक्स में शामिल किया जाए।
स्टीव के।

37

2.8js के साथ, निम्न कार्य करें:

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

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


यह काम करना चाहिए ; क्या आप इसका उदाहरण दे सकते हैं कि यह कहां काम नहीं करता है, यह भी कि आप कैसे पल का उपयोग कर रहे हैं (क्या आपने इसे एनपीएम, आदि के माध्यम से स्थापित किया है)?
सर्वार्थसिद्धि

4
हाल के क्षणों के साथ (मैंने 2.18.1 में परीक्षण किया) इसका उपयोग करें: क्षण.लोकेल ("डी"); var m = क्षण ()। format ("LLL")
apadana

1
अपादान सही है: आप के साथ स्थान निर्धारित करते हैं moment.locale('de'), और आप एक नई वस्तु बनाते हैं जो अब की तारीख moment()(कोष्ठक पर ध्यान दें) और फिर format('LLL')इसे दर्शाती है। कोष्ठक महत्वपूर्ण है। 2.20 में परीक्षण किया गया। इसके अलावा, उपयोग करने के लिए याद रखें moment-with-locale.jsऔर यदि आवश्यक हो, तो नाम को बदल दें moment.js। Django सिर्फ moment-with-locale.jsमेरे मामले में लोड करने से इनकार करता है ।
पश्चिमीगुन

1
यदि यह काम नहीं कर रहा है, तो इसे आज़माएँ: moment().locale('de').format('LLL');
एंथनी काल

यह एक प्रकार का पौधा है, बस ते लोकेल को आयात करना न भूलें जिसे आप उपयोग करना चाहते हैं (cfr। अगु डोंडो का उत्तर)।
जेरेन क्रेविट्स

13

आपको moment.lang(navigator.language)अपनी स्क्रिप्ट में जोड़ना होगा ।

और प्रत्येक उस देश के लोकेल को भी जोड़ना होगा जिसे आप प्रदर्शित करना चाहते हैं: उदाहरण के लिए GB या FR के लिए, आपको उस स्थानीय प्रारूप को क्षण में जोड़ना होगा। js पुस्तकालय। इस तरह के प्रारूप का एक उदाहरण क्षणिका प्रलेखन में उपलब्ध है। यदि आप इस प्रारूप को क्षण में नहीं जोड़ते हैं, तो यह हमेशा ही अमेरिकी लोकल को चुन लेगा, क्योंकि यह केवल वही है जो मैं वर्तमान में देख रहा हूं।


क्या होगा अगर उनका ब्राउज़र 'एन' में है और वे 'एस' में पढ़ रहे हैं तो यह केवल 'एन' में समय दिखाएगा
पीटर

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.locale('it').format('LLL');

लेकिन यह अंग्रेजी में तब तक रहेगा जब तक आप अपनी जरूरत के हिसाब से स्थापित नहीं करते।

उल्का ( rzymek द्वारा आपूर्ति ) में पल के लिए अलग-अलग स्थानों को जोड़ने का एक अच्छा, साफ तरीका है ।

सामान्य उल्का रास्ते में पल पैकेज स्थापित करें :

meteor add rzymek:moment

इसके बाद बस उन स्थानों को जोड़ें जिनकी आपको आवश्यकता है, उदाहरण के लिए इतालवी:

meteor add rzymek:moment-locale-it

या यदि आप वास्तव में सभी उपलब्ध स्थानों को जोड़ना चाहते हैं (अपने पेज में लगभग 30k जोड़ता है):

meteor add rzymek:moment-locales

@AntonAL अच्छी बात है कि आपने मुझे अपनी टिप्पणी भेजी है, मैंने अभी ध्यान दिया है कि प्रश्न वास्तव में उल्का के लिए नहीं था। हालांकि मेरे जवाब का बहुत उपयोगी मैं रेककन। मैंने इसे दर्शाने के लिए अपना उत्तर संपादित कर दिया है।
मार्वैन

धन्यवाद! जोड़ा गया rzymek:moment-locale-deऔर यह काम किया :)
nooitaf

4

2.18.1 और उसके बाद के पल के साथ:

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

2
स्थानीय फ़ाइलों को शामिल करना होगा, अन्यथा यह काम नहीं करेगा।
zeleven

2
यह पहले से ही काम नहीं कर रहा था जब तक कि संबंधित विशिष्ट क्षण लोकेल मॉड्यूल के रूप में अच्छी तरह से आयात नहीं किया गया था।
मेनकेक

@ मेनियाक मैं कुछ भी विशेष स्थापित नहीं किया था बस npm स्थापित - save पल और यह ठीक काम करता है
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>

डेमो


3

जैसा कि मैं गल्प और दोस्तों के साथ वेबपैक का उपयोग कर रहा था ( यह जनरेटर मेरे लिए सब कुछ सेट करता है) मुझे 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

निस्संदेह :) यह सुनिश्चित करता है कि आपके पास अनुवादित वाक्यांश उपलब्ध हों ताकि आप किसी अन्य भाषा (मक्खी पर) में स्विच कर सकें
गेमस्क्रिप्ट

3

मैं कोणीय 2-पल का उपयोग कर रहा हूं, लेकिन उपयोग समान होना चाहिए।

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

export class AppModule {

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

3

संस्करण के अनुसार पल js भाषा बदलें

संस्करण: 2.8+

moment.locale ( 'हाय');

संस्करण: 2.5.1

moment.lang ( 'हाय');


3

ठीक उसी तरह काम करें: return moment(status.created_at).locale('es').fromNow();


2
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
बदाचदबरा

3

मुझे यकीन नहीं है कि क्या बदला है लेकिन इस तरह से मेरे लिए काम की भाषा फ़ाइल आयात करना

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

आयात कथन में src को नोटिस करें


2

के लिए momentjs 2.12+ , निम्न कार्य करें:

moment.updateLocale('de');

यह भी ध्यान दें कि आपको moment.updateLocale(localeName, config)मौजूदा लोकेल को बदलने के लिए उपयोग करना चाहिए । moment.defineLocale(localeName, config)केवल एक नया स्थान बनाने के लिए उपयोग किया जाना चाहिए।


2

मेरे लिए, बनाने के लिए कुछ बदलाव हैं (देखें। 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। Django सिर्फ 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>
  );
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.