Reputation: 7199
I am using react-datepicker NPM package,
I tried to follow documentation but I was unable to import
registerLocale
and
setDefaultLocale
from react-datepicker
Do you see where I make mistake?
import DatePicker from 'react-datepicker';
...
<DatePicker
{ ...this.props }
dateFormat={ this.dateFormat }
ref={ (node) => { this.ref = node; } }
onClickOutside={ this.clickOutside }
/>
...
this is code where I want to import locale.
Upvotes: 35
Views: 99203
Reputation: 13
just an addition to ozgrozer's answer:
if your locale starts from Monday, you have to format day and set calendarStartDay attribute of ReactDatePicker to 1. Here are the changes:
const days = ["Pt", "Sa", "Ça", "Pe", "Cu", "Ct", "Pz"];
const months = [ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran","Temmuz", "Ağustos","Eylül", "Ekim", "Kasım", "Aralık" ];
export const datepickerLocale = {
localize: {
day: (n: number) => days[n - 1] ?? "Pz",
month: (n: number) => months[n]
},
formatLong: {
date: () => "dd/MM/yyyy",
time: () => "HH:mm",
dateTime: () => "dd/MM/yyyy HH:mm"
}
};
<ReactDatePicker
calendarStartDay={1}
locale={datepickerLocale}
{...others}
/>
Upvotes: 0
Reputation: 805
Here's how to do it for the latest version 2024+
npm install date-fns
npm install react-datepicker (For .js)
npm i @types/react-datepicker (For .tsx)
Use:
import DatePicker, { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import vi from "date-fns/locale/vi"; // The locale you want: vi, en, cn, in,..etc .
registerLocale("vi", vi);
View all list code of all country here
<DatePicker
locale="vi" //add here
selected={startDate}
onChange={(date) => setStartDate(date)}
selectsStart
startDate={startDate}
endDate={endDate}
className="form-control"
/>
Result:
before:
after:
Upvotes: 0
Reputation: 2042
For those who don't want to depend on date-fns
module you can define your own localization.
Here's a working demo on CodeSandbox.
const days = ['Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct', 'Pz']
const months = ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık']
const locale = {
localize: {
day: n => days[n],
month: n => months[n]
},
formatLong: {
date: () => 'mm/dd/yyyy'
}
}
<DatePicker locale={locale} />
Upvotes: 33
Reputation: 124
For dynamic locale imports you could use this code. However, you will get a larger package with dynamic imports:
constructor(props) {
const getLocale = locale => require(`date-fns/locale/${this.props.language}/index.js`)
this.locale = getLocale(this.props.language);
}
And then use
<DatePicker locale={this.locale} />
Upvotes: 2
Reputation: 806
In case you want to use a locale, that is not supported by date-fns (and those are quite few), you can do a shim.
const monthsBG = ['Януари', 'Февруари', 'Март', 'Април', 'Май', 'Юни', 'Юли', 'Август', 'Септември', 'Октомври', 'Ноември', 'Декември'];
const daysBG = ['нед', 'пон', 'вт', 'ср', 'четв', 'пет', 'съб'];
registerLocale('bg', {
localize: {
month: n => monthsBG[n],
day: n => daysBG[n]
},
formatLong:{}
});
and then you can use this locale as any other
<DatePicker
locale="bg"
...
/>
Upvotes: 6
Reputation: 1076
You don't even need to use registerLocale, just use import variable name ja without quotes :
<DatePicker
dateFormat="yyyy/MM/dd"
selected={this.state.date}
onChange={this.handleChange}
locale=ja
/>
You can also set the default locale for all date picker fields with setDefaultLocale :
constructor (props) {
registerLocale("ja", ja);
setDefaultLocale("ja");
}
Hope this helps.
Upvotes: 3
Reputation: 177
import React, { Component } from 'react';
import DatePicker, { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import ja from "date-fns/locale/ja";
registerLocale("ja", ja);
class App extends Component {
constructor(props) {
super(props);
this.state = {
date: new Date()
}
this.handleChange = this.handleChange.bind(this);
}
handleChange(date) {
this.setState({
date
});
}
render() {
return (
<div className="App">
<body>
<DatePicker
dateFormat="yyyy/MM/dd"
selected={this.state.date}
onChange={this.handleChange}
locale='ja'
/>
</body>
</div>
);
}
}
export default App;
I could get the result you wanted. And I tried to make it with moment
library but it didn't work on my code. sorry
Upvotes: 6
Reputation: 195992
First of all make sure you are using the latest version of the plugin (2.0.0).
Then you need to also install the date-fns
module, but for the moment the react-datepicker
is working with the 2.0.0-alpha.23 version.
Then you need to import and register the locale you want and finally add the locale
property to the DatePicker
so (after installing the correct versions)
import DatePicker, { registerLocale } from "react-datepicker";
import el from "date-fns/locale/el"; // the locale you want
registerLocale("el", el); // register it with the name you want
and use it
<DatePicker
locale="el"
...
/>
Working demo at https://codesandbox.io/s/7j8z7kvy06
Upvotes: 68