Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

locally changing locale is immutable, docs update #182

Merged
merged 5 commits into from
May 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
English | [简体中文](./README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md)
English | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md)

<p align="center"><a href="#" target="_blank" rel="noopener noreferrer"><img width="550"
src="https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png"
Expand Down
2 changes: 1 addition & 1 deletion docs/en/I18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ dayjs.locale(customizedLocaleObject) // use customize locale

#### Changing locales locally

* Returns CURRENT `Dayjs` object.
* Returns a new `Dayjs` object by switching to new locale.

Exactly the same as `dayjs#locale`, but only use locale in a specific instance.

Expand Down
2 changes: 0 additions & 2 deletions docs/ja/README-ja.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
[English](../../README.md) | [简体中文](../../README.zh-CN.md) | 日本語

<p align="center"><a href="#" target="_blank" rel="noopener noreferrer"><img width="550"
src="https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png"
alt="Day.js"></a></p>
Expand Down
2 changes: 0 additions & 2 deletions docs/pt-br/README-pt-br.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
[English](../../README.md) | [简体中文](../../README.zh-CN.md) | Português Brasileiro

<p align="center"><a href="#" target="_blank" rel="noopener noreferrer"><img width="550"
src="https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png"
alt="Day.js"></a></p>
Expand Down
4 changes: 2 additions & 2 deletions docs/zh-cn/I18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ dayjs.locale(customizedLocaleObject) // 使用自定义语言

* 改变全局语言并不会影响在此之前生成的实例

#### 改变局部语言
#### 改变当前实例的语言

* 返回 **当前** `Dayjs` 对象
* 改变语言并返回新的`Dayjs` 对象

用法与`dayjs#locale`一致, 但只影响当前实例的语言设置

Expand Down
10 changes: 4 additions & 6 deletions README.zh-CN.md → docs/zh-cn/README.zh-CN.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
[English](./README.md) | 简体中文 | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md)

<p align="center"><a href="#" target="_blank" rel="noopener noreferrer"><img width="550"
src="https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png"
alt="Day.js"></a></p>
Expand Down Expand Up @@ -45,7 +43,7 @@ dayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:m
npm install dayjs --save
```

📚[安装指南](./docs/zh-cn/Installation.md)
📚[安装指南](./Installation.md)

### API

Expand All @@ -63,7 +61,7 @@ dayjs().add(1, 'year') // 处理
dayjs().isBefore(dayjs()) // 查询
```

📚[API 参考](./docs/zh-cn/API-reference.md)
📚[API 参考](./API-reference.md)

### 国际化 I18n

Expand All @@ -78,7 +76,7 @@ dayjs.locale('es') // 全局使用西班牙语

dayjs('2018-05-05').locale('zh-cn').format() // 在这个实例上使用简体中文
```
📚[国际化 I18n](./docs/zh-cn/I18n.md)
📚[国际化 I18n](./I18n.md)

### 插件

Expand All @@ -91,7 +89,7 @@ dayjs.extend(AdvancedFormat) // 使用插件

dayjs().format('Q Do k kk X x') // 使用扩展后的API
```
📚[插件列表](./docs/zh-cn/Plugin.md)
📚[插件列表](./Plugin.md)

## 开源协议

Expand Down
5 changes: 3 additions & 2 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,9 @@ class Dayjs {
}

locale(preset, object) {
this.$L = parseLocale(preset, object, true)
return this
const that = this.clone()
that.$L = parseLocale(preset, object, true)
return that
}

clone() {
Expand Down
9 changes: 3 additions & 6 deletions src/plugin/advancedFormat.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@ import { FORMAT_DEFAULT } from '../constant'
export default (o, c, d) => { // locale needed later
const proto = c.prototype
const oldFormat = proto.format
// eslint-disable-next-line no-nested-ternary
d.en.ordinal = (number) => {
let suffix = 'th'
if (![11, 12].includes(number)) {
suffix = ['st', 'nd', 'rd'][(number % 10) - 1] || suffix
}
return `${number}[${suffix}]`
const s = ['th', 'st', 'nd', 'rd']
const v = number % 100
return `[${number}${(s[(v - 20) % 10] || s[v] || s[0])}]`
}
// extend en locale here
proto.format = function (formatStr, localeObject) {
Expand Down
14 changes: 14 additions & 0 deletions test/locale.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,20 @@ it('set global locale', () => {
.toBe('Saturday 28, April')
})

it('immutable instance locale', () => {
dayjs.locale('en')
const origin = dayjs('2018-4-28')
expect(origin.format(format))
.toBe('Saturday 28, April')
expect(origin.locale('es').format(format))
.toBe('Sábado 28, Abril')
const changed = origin.locale('es')
expect(changed.format(format))
.toBe('Sábado 28, Abril')
expect(origin.format(format))
.toBe('Saturday 28, April')
})

it('User custom locale', () => {
expect(dayjs('2018-4-28')
.locale('xx', {
Expand Down
4 changes: 4 additions & 0 deletions test/plugin/advancedFormat.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ it('Format Day of Month Do 1 - 31', () => {
expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))
d = '2018-05-11'
expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))
d = '2018-05-12'
expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))
d = '2018-05-13'
expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))
d = '2018-05-22'
expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))
})
Expand Down