update docs

This commit is contained in:
wxzhang 2022-08-21 21:26:12 +08:00
parent 4058fd08b8
commit 5914af53f0
11 changed files with 500 additions and 80 deletions

View File

@ -13,6 +13,9 @@ export default defineConfig({
includes:["docs/src"]
},
locales: [['zh-CN', '中文']],
theme:{
"@c-heading": "#118809"
},
scripts:[`
var _hmt = _hmt || [];
(function() {

View File

@ -2,10 +2,10 @@
| 包| 版本号| 最后更新|说明|
| --- | :---:| --- |---|
|**@voerkai18n/utils**|1.0.13|2022/08/20|公共工具库|
|**@voerkai18n/runtime**|1.1.2|2022/08/20|核心运行时|
|**@voerkai18n/formatters**|1.0.6|2022/04/15|扩展格式化器|
|**@voerkai18n/runtime**|1.1.3|2022/08/21|核心运行时|
|**@voerkai18n/formatters**|1.0.6|2022/04/15|格式化器,提供对要翻译文本的转换功能|
|**@voerkai18n/react**|1.0.4|2022/04/16|React支持,提供语言切换等功能|
|**@voerkai18n/cli**|1.0.35|2022/08/20|命令行工具,用来初始化/提取/编译/自动翻译等工具链|
|**@voerkai18n/cli**|1.0.36|2022/08/21|命令行工具,用来初始化/提取/编译/自动翻译等工具链|
|**@voerkai18n/babel**|1.0.24|2022/08/20|Babel插件实现自动导入t函数和自动文本映射|
|**@voerkai18n/vite**|1.0.13|2022/08/20|Vite插件,提供自动插入翻译函数和文本映射等功能|
|**@voerkai18n/vue**|1.0.6|2022/08/20|Vue3插件,提供自动插件翻译函数和语言切换功能|

View File

@ -1,27 +1,436 @@
# 日期时间
`@voerkai18n/runtime`内置了对日期时间进行处理的格式化器,可以直接使用,不需要额外的安装。
## 概述
得益于`voerkai18n`强大的格式化机制,`@voerkai18n/runtime`内置了对强大灵活的日期时间处理机制,可以很轻松实现多语言场景下的灵活多变的日期时间显示。
`voerkai18n`支持丰富的格式化器用来支持本地化日期时间显示:
- `date`
- `time`
- `year`
- `quarter`
- `month`
- `day`
- `weekday`
- `hour`
- `hour12`
- `minute`
- `second`
- `millisecond`
- `timestamp`
关于格式化器的更完整说明请[参阅](../advanced/customformatter)
## 指南
### 基本用法
当需要对日期和时间进行本地化显示时,请使用相对应的日期时间格式化器,可以在`t`函数中使用来对日期型变量进行本地化格式输出。
- **无参数(默认格式)**
```javascript | pure
t("{ value | date }",new Date()) // Date类型
t("{ value | date }","2022/12/9 09:12:36") // 标准的日期时间字符串
t("{ value | date }",1661084229790) // 时间戳
```
- **指定预定义的格式**
```javascript | pure
t("{ value | date('<格式名称>') }",new Date())
t("{ value | date('<格式名称>') }","2022/12/9 09:12:36")
t("{ value | date('<格式名称>') }",1661084229790)
```
不同格式化器的预定义格式名称不同,但是一般:
- `long` = 长格式
- `short` = 短格式
- `number` = 原始数值,如星期一=1八月=8
- **自定义格式**
```javascript | pure
t("{ value | date('<模板字符串>') }",new Date())
t("{ value | date('<模板字符串>') }","2022/12/9 09:12:36")
t("{ value | date('<模板字符串>') }",1661084229790)
```
根据指定的模板字符串进行插值后输出。模板字符串中可以使用如`YYYY``MM``DD``占位符`来表示日期时间中的年月日等,可用的模板占位符见本文最后。
### 配置方法
`voerkai18n`运行时已经内置了`zh``en`两种语言的日期时间相关的的格式化器。为了满足复杂的应用需要求,可以根据需要对日期时间格式化进行配置定制。
配置定制日期时间格式化非常简单,当使用`voerkai18n compile`后,项目结构中会生成`formatters`如下:
```javascript | pure
<myapp>
|--src
| |-- languages
| | |--
| | |-- formatters
| | | |-- zh.js
| | | |-- en.js
| | | |-- de.js
....
```
`formatters`文件夹中的`zh.js``en.js``de.js`文件中包括了您自定义的格式化器。
现在一般您可以选择:
- 修改内置的日期时间格式化
- 配置指定语言的日期时间格式化
#### **修改内置的日期时间格式**
由于`@voerkai18n/runtime`中已经内置了`zh``en`两种语言的日期时间格式化器,大多数情况下,我们会定时更新确保其有效工作,一般情况下,您是不需要修改`zh.js``en.js`这两个文件了。
但是如果内置的`zh``en`两种语言的日期时间格式化器不能满足要求,您可以选择性地修改`zh.js``en.js`这两个文件,这些文件会覆盖合并到内置的日期和时间格式化规则。
当您第一次打开`languages/formatters/<语言名称>.js`时会发现里面是空的,除了一些注释外。如下:
```javscript | pure
export default {
$config:{
}
}
```
现在假设我们需要将`zh`语言的日期时间`long`格式的输出从默认的`YYYY年MM月DD日 HH点mm分ss秒`调整为`北京时间: YYYY年MM月DD日 HH点mm分ss秒`,那么只需要修改 `languages/formatters/zh.js`,如下:
```javscript | pure
export default {
$config:{
datetime:{
date:{
long:"北京时间: YYYY年MM月DD日 HH点mm分ss秒"
}
}
}
}
```
`languages/formatters/zh.js`中的配置优先级最高,会合并覆盖内置的配置。
**为什么可以通过修改`$config.datetime.date`来修改默认的日期时间格式化?**
因为`date`格式化器是可配置的,当该格式化器会从`$config.datetime.date`读取模板字符串来进行格式化输出。因此,只需要覆盖`$config.datetime.date`参数即可实现自定义格式化。
事实上,`date`/`quarter`/`month`/`weekday`/`time`等格式化器均是可配置的,对应的配置位置是:
```javscript | pure
export default {
$config:{
datetime:{
date:{ ... },
quarter:{ ... },
month:{ ... },
weekday:{ ... },
time:{ ... },
}
}
}
```
按照这样的机制,我们就可分别配置在不种语言下,对日期时间等显示方式。
#### **配置指定语言的日期时间格式化**
默认情况下,`en`语言的日期时间格式化器被注册到全局,当任何一种语言的指定格式化器没有定义时,会在全局格式化器中查找,因此`en`语言的日期时间格式化器是适用于所有语言。
如果`en`语言的日期时间格式化不符合`de`语言的要求,修改`languages/formatters/de.js`文件。
```javscript | pure
export default {
$config:{
datetime:{
date:{
long:"<de语言的长日期时间格式模板>"
short:"<de语言的长日期时间格式模板>"
format:"long"
}
}
}
}
```
这样,当切换到`de`语言时date格式化器就会读取`languages/formatters/de.js`文件中的配置,从而实现符合要求的`de`语言的日期时间格式化。
### 格式模板占位符
| 占位符 | 说明 |
| --- | --- |
|YYYY | 2018 年,四位数|
|YY | 18 年,两位数 |
|MMM | Jan-Dec 月,英文缩写|
|MM | 01-12 月,两位数字|
|M | 1-12 月从1开始|
|DD | 01-31 日,两位数|
|D | 1-31 日|
|HH | 00-23 24小时两位数|
|H | 0-23 24小时|
|hh | 01-12 12小时两位数|
|h | 1-12 12小时|
|mm | 00-59 分钟,两位数|
|m | 0-59 分钟|
|ss | 00-59 秒,两位数|
|s | 0-59 秒|
|SSS | 000-999 毫秒,三位数|
|A | AM / PM 上/下午,大写|
|a | am / pm 上/下午,小写|
## 格式化器
### 日期 - `date`
`date`格式化器用来对日期类型的变量进行格式化。
#### **用法**
```javascript | pure
// 切换到中文
t("现在是{ value }",new Date()) // == 现在是2022年3月12日 18点28分12秒
t("现在是{ value | date }",new Date()) // == 现在是2022年3月12日
t("现在是{ value | shortdate }",new Date()) // == 现在是2022/3/12
t("现在是{ value | time }",new Date()) // == 现在是18点28分12秒
t("现在是{ value | shorttime }",new Date()) // == 现在是18:28:12
t("现在是{}",new Date()) // == 现在是2022年3月12日 18点28分12秒
// 切换到英文
t("现在是{ value }",new Date()) // == 现在是2022年3月12日 18点28分12秒
t("现在是{ value | date }",new Date()) // == Now is 2022/3/12
t("现在是{ value | shortdate }",new Date()) // == Now is 2022/3/12
t("现在是{ value | time }",new Date()) // == Now is 18:28:12
t("现在是{ value | shorttime }",new Date()) // == Now is 18:28:12
t("现在是{}",new Date()) // == Now is 2022/3/20 19:17:24'
t("现在是{ | shorttime | empty() }",new Date()) // == Now is 2022/3/20 19:17:24'
t("{ value | date }",new Date())
t("{ value | date }","2022/12/9 09:12:36")
t("{ value | date }",1661084229790)
t("{ value | date('long') }",new Date())
t("{ value | date('short') }","2022/12/9 09:12:36")
t("{ value | date('local') }",1661084229790)
t("{ value | date('iso') }",1661084229790)
t("{ value | date('gmt') }",1661084229790)
t("{ value | date('utc') }",1661084229790)
t("{ value | date('YYYY年MM月DD日 HH点mm分ss秒') }",1661084229790)
t("{ value | date('YYYY-MM-DD') }",1661084229790)
```
#### **参数**
`date`格式化器支持参数:
| 参数 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `format` | `String` | `local` | 输出样式,取值`local`,`long`,`short`,`iso`,`gmt`,`utc`,`<模板字符串>` |
**说明**
- **`local`** : 调用`toLocalString()`输出日期时间。
- **`long`** 按每种语言预设的`long`模板输出
- **`short`** 按每种语言预设的`short`模板输出
- **`iso`** : 调用`toISOString()`输出日期时间。
- **`gmt`** : 调用`toGMTString()`输出日期时间。
- **`utc`** : 调用`toUTCString()`输出日期时间。
- **`<模板字符串>`** : 自定义格式输出,支持各种占位符,详见本文最后。
#### **示例**
**当`activeLanguage == "zh"`时:**
| 翻译 | 输出 |
| --- | --- |
| `t("现在是{ value }",NOW)` | `现在是2022/8/12 10:12:36`|
| `t("现在是{ value \| date }",NOW)` | `现在是2022/8/12 10:12:36`|
| `t("现在是{ value \| date('local') }",NOW)` | `` |
| `t("现在是{ value \| date('long') }",NOW)` | `现在是2022年08月12日 10点12分36秒` |
| `t("现在是{ value \| date('short') }",NOW)` | `现在是2022/08/12` |
| `t("现在是{ value \| date('iso') }",NOW)` | `` |
| `t("现在是{ value \| date('gmt') }",NOW)` | `` |
| `t("现在是{ value \| date('utc') }",NOW)` | `` |
| **自定义格式** | |
| `t("现在是{ value \| date('YYYY-MM-DD HH:mm:ss')}",NOW)`| `现在是2022-08-12 10:12:36`|
| `t("现在是{ value \| date('YYYY/MM/DD') }",NOW)",NOW)` | `现在是2022-08-12`|
| `t("现在是{ value \| date('HH:mm:ss') }",NOW)` | `10:12:36` |
**当`activeLanguage == "en"`时:**
| 翻译 | 输出 |
| --- | --- |
| `t("现在是 { value }",NOW)` | `Now is 2022/8/12 10:12:36`|
| `t("现在是 { value \| date }",NOW)` | `Now is 2022/8/12 10:12:36`|
| `t("现在是 { value \| date('local') }",NOW)` | `Now is ` |
| `t("现在是 { value \| date('long') }",NOW)` | `Now is 2022/08/12 10:12:36` |
| `t("现在是 { value \| date('short') }",NOW)` | `Now is 2022/08/12` |
| `t("现在是 { value \| date('iso') }",NOW)` | `Now is ` |
| `t("现在是 { value \| date('gmt') }",NOW)` | `Now is ` |
| `t("现在是 { value \| date('utc') }",NOW)` | `Now is ` |
| **自定义格式** | |
| `t("现在是 { value \| date('YYYY-MM-DD HH:mm:ss') }",NOW`| `Now is 2022-08-12 10:12:36`|
| `t("现在是 { value \| date('YYYY/MM/DD')}",NOW"),` | `Now is 2022-08-12`|
| `t("现在是 { value \| date('HH:mm:ss') }",NOW)` | `Now is 10:12:36` |
#### **配置**
除了`local`,`iso`,`gmt`,`utc`是调用`Date原型方法`外,`long`,`short`两种预设的格式是采用可配置的模板字符串来定义的。默认情况下其预设格式是:
| 格式名称 | 中文(zh) | 英文(en) |
| --- | --- | --- |
| `long` | `YYYY年MM月DD日 HH点mm分ss秒` | `YYYY/MM/DD HH:mm:ss` |
| `short` | `YYYY/MM/DD` | `YYYY/MM/DD` |
### 时间 - `time`
`date`格式化器用来对日期类型的变量进行格式化。`date`格式化器支持参数:
#### 参数
| 参数 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `format` | `String` | `local` | 输出样式,取值`local`,`long`,`short`,`timestamp`,`<模板字符串>` |
- **`local`** : 调用`toLocaleTimeString()`输出时间。
- **`long`** 按每种语言预设的`long`模板输出
- **`short`** 按每种语言预设的`short`模板输出
- **`<模板字符串>`** : 按自定义的格式输出,变量可参阅上述`date`.
#### 示例
**当`activeLanguage == "zh"`时:**
| 翻译 | 输出 |
| --- | --- |
| `t("现在时间 - { value \| time }",NOW)` | `现在时间 - ` |
| `t("现在时间 - { value \| time('local') }",NOW)` | `现在时间 - ` |
| `t("现在时间 - { value \| time('long') }",NOW)` | `现在时间 - 10点12分36秒` |
| `t("现在时间 - { value \| time('short') }",NOW)` | `现在时间 - 10:12:36` |
| `t("现在时间 - { value \| time('timestamp') }", ",NOW)` | `现在时间 - 1660270356000` |
| **自定义格式**
| `t("现在时间 - { value \| time('HH:mm:ss') }",NOW)` | `现在时间 - 10:12:36` |
| `t("现在时间 - { value \| time('mm:ss') }",NOW)` | `现在时间 - 12:36` |
| `t("现在时间 - { value \| time('ss') ",NOW)` | `现在时间 - 36` |
**当`activeLanguage == "en"`时:**
| 翻译 | 输出 |
| --- | --- |
| `t("现在时间 - { value \| time }",NOW)` | `Now is - ` |
| `t("现在时间 - { value \| time('local') }",NOW)` | `Now is - ` |
| `t("现在时间 - { value \| time('long') }",NOW)` | `Now is - 10点12分36秒` |
| `t("现在时间 - { value \| time('short') }",NOW)` | `Now is - 10:12:36` |
| `t("现在时间 - { value \| time('timestamp') }",NOW)` | `Now is - 1660270356000` |
| **自定义格式**
| `t("现在时间 - { value \| time('HH:mm:ss') }",NOW)` | `Now is - 10:12:36` |
| `t("现在时间 - { value \| time('mm:ss') }",NOW)` | `Now is - 12:36` |
| `t("现在时间 - { value \| time('ss') },NOW) ` | `Now is - 36` |
#### 配置
`time`格式化器的配置方式同`date`格式化器。
### 年份 - `year`
简单输出年份数值,如`t("现在是{ value | year}",new Date())`输出`现在是2022`
### 季度 - `quarter`
输出一年中第几个季度。
#### 参数
| 参数 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `format` | `String` | `short` | 输出样式,取值`short`,`long`,`number` |
#### 示例
**当`activeLanguage == "zh"`时:**
| 文本 | 输出 |
| --- | --- |
| `t("今年{ value \| quarter }",NOW)` | `今年Q1 ` |
| `t("今年{ value \| quarter("long") }",NOW)` | `今年一季度 ` |
| `t("今年{ value \| quarter("short") }",NOW)` | `今年Q1 ` |
| `t("今年{ value \| quarter("number") }",NOW)` | `今年1` |
**当`activeLanguage == "en"`时:**
| 文本 | 输出 |
| --- | --- |
| `t("今年{ value \| quarter }",NOW)` | `First Quarter of this year` |
| `t("今年{ value \| quarter("long") }",NOW)` | `First Quarter of this year` |
| `t("今年{ value \| quarter("short") }",NOW)` | `Q1 of this year` |
| `t("今年{ value \| quarter("number") }",NOW)` | `1 of this year` |
#### 配置
配置方式同`date`格式化器。可以选择性地修改`languages/formatters/<语言名称>.js`
```javascript | pure
export default {
$config:{
datetime:{
quarter{
long:["Q1","Q2","Q3","Q4"],
short:["Q1","Q2","Q3","Q4"],
format : "short",
}
}
}
}
```
### 月份 - `month`
输出月份
`month`格式化器用来输出月份。
#### 参数
| 参数 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `format` | `String` | `long` | 输出样式,取值`long`,`short`,`number` |
- **`long`** 按每种语言预设的`long`模板输出
- **`short`** 按每种语言预设的`short`模板输出
- **`number`** 输出月份的数字
- **`<模板字符串>`** : 按自定义的格式输出,变量可参阅上述`date`.
#### 示例
**当`activeLanguage == "zh"`时:**
| 翻译 | 输出 |
| --- | --- |
| `t("现在时间 - { value \| month }",NOW)` | `现在时间 - 八月 ` |
| `t("现在时间 - { value \| month('long') }",NOW)` | `现在时间 - 八月` |
| `t("现在时间 - { value \| month('short') }",NOW)` | `现在时间 - 八` |
| `t("现在时间 - { value \| month('number') }", ",NOW)` | `现在时间 - 8` |
**当`activeLanguage == "en"`时:**
| 翻译 | 输出 |
| --- | --- |
| `t("现在时间 - { value \| time }",NOW)` | `Now is - August` |
| `t("现在时间 - { value \| month('long') }",NOW)` | `Now is - August` |
| `t("现在时间 - { value \| month('short') }",NOW)` | `Now is - Aug` |
| `t("现在时间 - { value \| month('number') }",NOW)` | `Now is - 8` |
#### 配置
`month`格式化器的配置方式同`date`格式化器。
可以选择性地修改`languages/formatters/<语言名称>.js`
```javascript | pure
export default {
$config:{
datetime:{
month{
long : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
short : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
format : "short",
}
}
}
}
```
### 天 - `day`
输出每个月的几号。如`t("现在是{ value | day }号",new Date())`输出`现在是28号`
### 星期 - `weekday`
输出一星期中的第几天,如星期一、星期二、...星期日。
#### 参数
| 参数 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `format` | `String` | `long` | 输出样式,取值`long`,`short`,`number` |
#### 示例
**当`activeLanguage == "zh"`时:**
| 文本 | 输出 |
| --- | --- |
| `t("今天是{ value \| weekday }",NOW)` | `今天是星期一 ` |
| `t("今天是{ value \| weekday("long") }",NOW)` | `今天是星期一 ` |
| `t("今天是{ value \| weekday("short") }",NOW)` | `今天是一 ` |
| `t("今天是{ value \| weekday("number") }",NOW)` | `今天是1` |
**当`activeLanguage == "en"`时:**
| 文本 | 输出 |
| --- | --- |
| `t("今天是{ value \| weekday }",NOW)` | `Today is Monday ` |
| `t("今天是{ value \| weekday("long") }",NOW)` | `Today is Monday` |
| `t("今天是{ value \| weekday("short") }",NOW)` | `Today is Mon` |
| `t("今天是{ value \| weekday("number") }",NOW)` | `Today is 1` |
#### 配置
配置方式同`date`格式化器。可以选择性地修改`languages/formatters/<语言名称>.js`
```javascript | pure
export default {
$config:{
datetime:{
long :["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
format : 0, // 默认格式: 0:long-长名称1:short-短名称2:number-数字
}
}
}
```
### 小时 - `hour`
### 分钟 - `minute`
### 秒 - `second`
### 毫秒 - `millisecond`
### 时间戳 - `timestamp`

View File

@ -20,23 +20,23 @@
"@rollup/plugin-babel": "^5.3.1",
"@rollup/plugin-commonjs": "^21.0.2",
"@vuepress/client": "^2.0.0-beta.49",
"cross-env": "^7.0.3",
"dayjs": "^1.11.0",
"deepmerge": "^4.2.2",
"dumi": "^1.0.13",
"fs-extra": "^10.0.1",
"gulp": "^4.0.2",
"jest": "^27.5.1",
"logsets": "^1.0.8",
"pnpm": "^7.8.0",
"prettier": "^2.2.1",
"rollup": "^2.70.1",
"rollup-plugin-clear": "^2.0.7",
"shelljs": "^0.8.5",
"vinyl": "^2.2.1",
"dumi": "^1.0.13",
"prettier": "^2.2.1",
"yorkie": "^2.0.0",
"pnpm":"^7.8.0"
"yorkie": "^2.0.0"
},
"dependencies": {
"cross-env": "^7.0.3",
"inquirer": "^8.2.2"
}
}

View File

@ -1258,11 +1258,15 @@ const dateFormatter = Formatter$1((value,format,$config)=>{
params : ['format'],
configKey: "datetime.date"
});
// 季度格式化器 format= 0=短格式 1=长格式
Formatter$1((value,format,$config)=>{
// 季度格式化器 format= 0=短格式 1=长格式 1=数字
const quarterFormatter = Formatter$1((value,format,$config)=>{
const month = value.getMonth() + 1;
if(format<0 && format>1) format = 0;
return format==0 ? $config.shortNames[month] : (format==1 ? $config.shortNames[month] : month+1)
const quarter = Math.floor( ( month % 3 == 0 ? ( month / 3 ) : (month / 3 + 1 ) ));
if(typeof(format)==='string'){
format = ['short','long','number'].indexOf(format);
}
if(format<0 && format>2) format = 0;
return format==0 ? $config.short[quarter] : (format==1 ? $config.long[quarter] : quarter)
},{
normalize: toDate,
params : ['format'],
@ -1276,7 +1280,7 @@ const monthFormatter = Formatter$1((value,format,$config)=>{
format = ['long','short','number'].indexOf(format);
}
if(format<0 && format>2) format = 0;
return format==0 ? $config.names[month] : (format==1 ? $config.shortNames[month] : month+1)
return format==0 ? $config.long[month] : (format==1 ? $config.short[month] : month+1)
},{
normalize: toDate,
params : ['format'],
@ -1290,7 +1294,7 @@ const weekdayFormatter = Formatter$1((value,format,$config)=>{
format = ['long','short','number'].indexOf(format);
}
if(format<0 && format>2) format = 0;
return format==0 ? $config.names[day] : (format==1 ? $config.shortNames[day] : day)
return format==0 ? $config.long[day] : (format==1 ? $config.short[day] : day)
},{
normalize: toDate,
params : ['format'],
@ -1397,17 +1401,18 @@ var en = {
format : "local"
},
quarter : {
names : ["Q1","Q2","Q3","Q4"],
shortNames : ["Q1","Q2","Q3","Q4"]
long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
short : ["Q1","Q2","Q3","Q4"],
format : "short"
},
month:{
names : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
shortNames : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
long : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
short : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
format : 0 // 0-长名称1-短名称2-数字
},
weekday:{
names :["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
shortNames : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
format : 0, // 0-长名称1-短名称2-数字
},
time : {
@ -1465,10 +1470,10 @@ var en = {
date : dateFormatter,
time : timeFormatter,
year : value => toDate(value).getFullYear(),
month : value => toDate(value).getMonth() + 1,
day : value => toDate(value).getDate(),
weekday : weekdayFormatter,
quarter : quarterFormatter,
month : monthFormatter,
weekday : weekdayFormatter,
day : value => toDate(value).getDate(),
// ******************* 时间 *******************
hour : value => toDate(value).getHours(),
hour12 : value => {const hour = toDate(value).getHours(); return hour > 12 ? hour - 12 : thour},
@ -1608,18 +1613,18 @@ var zh = {
format : 'local'
},
quarter : {
names : ["一季度","二季度","三季度","四季度"],
shortNames : ["Q1","Q2","Q3","Q4"],
format : 0 // 0-短格式,1-长格式
long : ["一季度","二季度","三季度","四季度"],
short : ["Q1","Q2","Q3","Q4"],
format : "short" // 0-短格式,1-长格式,2-数字
},
month:{
names : CN_MONTH_NAMES,
shortNames : CN_SHORT_MONTH_NAMES,
long : CN_MONTH_NAMES,
short : CN_SHORT_MONTH_NAMES,
format : 0, // 0-长名称1-短名称2-数字
},
weekday:{
names : CN_WEEK_DAYS,
shortNames : CN_SHORT_WEEK_DAYS,
short : CN_WEEK_DAYS,
long : CN_SHORT_WEEK_DAYS,
format : 0, // 0-长名称1-短名称2-数字
},
time:{

View File

@ -1,6 +1,6 @@
{
"name": "@voerkai18n/cli",
"version": "1.0.35",
"version": "1.0.36",
"description": "命令行工具,用来初始化/提取/编译/自动翻译等工具链",
"main": "index.js",
"homepage": "https://gitee.com/zhangfisher/voerka-i18n",
@ -50,5 +50,5 @@
"devDependencies": {
"@voerkai18n/autopublish": "workspace:^1.0.2"
},
"lastPublish": "2022-08-20T20:56:11+08:00"
"lastPublish": "2022-08-21T21:25:42+08:00"
}

View File

@ -1,4 +1,4 @@
const {i18nScope, translate, getInterpolatedVars } = require('./dist/runtime.cjs.js')
const {i18nScope, translate, getInterpolatedVars } = require('../dist/runtime.cjs.js')
const dayjs = require('dayjs');
function toLanguageDict(values,startIndex=0){

View File

@ -44,12 +44,15 @@ const dateFormatter = Formatter((value,format,$config)=>{
params : ['format'],
configKey: "datetime.date"
})
// 季度格式化器 format= 0=短格式 1=长格式
// 季度格式化器 format= 0=短格式 1=长格式 1=数字
const quarterFormatter = Formatter((value,format,$config)=>{
const month = value.getMonth() + 1
const quarter = Math.floor( ( month % 3 == 0 ? ( month / 3 ) : (month / 3 + 1 ) ))
if(format<0 && format>1) format = 0
return format==0 ? $config.shortNames[month] : (format==1 ? $config.shortNames[month] : month+1)
if(typeof(format)==='string'){
format = ['short','long','number'].indexOf(format)
}
if(format<0 && format>2) format = 0
return format==0 ? $config.short[quarter] : (format==1 ? $config.long[quarter] : quarter)
},{
normalize: toDate,
params : ['format'],
@ -63,7 +66,7 @@ const monthFormatter = Formatter((value,format,$config)=>{
format = ['long','short','number'].indexOf(format)
}
if(format<0 && format>2) format = 0
return format==0 ? $config.names[month] : (format==1 ? $config.shortNames[month] : month+1)
return format==0 ? $config.long[month] : (format==1 ? $config.short[month] : month+1)
},{
normalize: toDate,
params : ['format'],
@ -77,7 +80,7 @@ const weekdayFormatter = Formatter((value,format,$config)=>{
format = ['long','short','number'].indexOf(format)
}
if(format<0 && format>2) format = 0
return format==0 ? $config.names[day] : (format==1 ? $config.shortNames[day] : day)
return format==0 ? $config.long[day] : (format==1 ? $config.short[day] : day)
},{
normalize: toDate,
params : ['format'],
@ -184,17 +187,18 @@ module.exports = {
format : "local"
},
quarter : {
names : ["Q1","Q2","Q3","Q4"],
shortNames : ["Q1","Q2","Q3","Q4"]
long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
short : ["Q1","Q2","Q3","Q4"],
format : "short"
},
month:{
names : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
shortNames : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
long : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
short : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
format : 0 // 0-长名称1-短名称2-数字
},
weekday:{
names :["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
shortNames : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
format : 0, // 0-长名称1-短名称2-数字
},
time : {
@ -252,10 +256,10 @@ module.exports = {
date : dateFormatter,
time : timeFormatter,
year : value => toDate(value).getFullYear(),
month : value => toDate(value).getMonth() + 1,
day : value => toDate(value).getDate(),
weekday : weekdayFormatter,
quarter : quarterFormatter,
month : monthFormatter,
weekday : weekdayFormatter,
day : value => toDate(value).getDate(),
// ******************* 时间 *******************
hour : value => toDate(value).getHours(),
hour12 : value => {const hour = toDate(value).getHours(); return hour > 12 ? hour - 12 : thour},

View File

@ -17,18 +17,18 @@ module.exports = {
format : 'local'
},
quarter : {
names : ["一季度","二季度","三季度","四季度"],
shortNames : ["Q1","Q2","Q3","Q4"],
format : 0 // 0-短格式,1-长格式
long : ["一季度","二季度","三季度","四季度"],
short : ["Q1","Q2","Q3","Q4"],
format : "short" // 0-短格式,1-长格式,2-数字
},
month:{
names : CN_MONTH_NAMES,
shortNames : CN_SHORT_MONTH_NAMES,
long : CN_MONTH_NAMES,
short : CN_SHORT_MONTH_NAMES,
format : 0, // 0-长名称1-短名称2-数字
},
weekday:{
names : CN_WEEK_DAYS,
shortNames : CN_SHORT_WEEK_DAYS,
short : CN_WEEK_DAYS,
long : CN_SHORT_WEEK_DAYS,
format : 0, // 0-长名称1-短名称2-数字
},
time:{

View File

@ -1,6 +1,6 @@
{
"name": "@voerkai18n/runtime",
"version": "1.1.2",
"version": "1.1.3",
"description": "核心运行时",
"main": "./dist/index.cjs",
"module": "dist/index.esm.js",
@ -36,5 +36,5 @@
"rollup-plugin-clear": "^2.0.7",
"rollup-plugin-terser": "^7.0.2"
},
"lastPublish": "2022-08-20T20:55:57+08:00"
"lastPublish": "2022-08-21T21:25:29+08:00"
}

3
pnpm-lock.yaml generated
View File

@ -27,7 +27,6 @@ importers:
vinyl: ^2.2.1
yorkie: ^2.0.0
dependencies:
cross-env: 7.0.3
inquirer: 8.2.4
devDependencies:
'@babel/core': 7.18.10
@ -36,6 +35,7 @@ importers:
'@rollup/plugin-babel': 5.3.1_tui6liyexu3zy4m5r2rytc7ixu
'@rollup/plugin-commonjs': 21.1.0_rollup@2.77.2
'@vuepress/client': 2.0.0-beta.49
cross-env: 7.0.3
dayjs: 1.11.4
deepmerge: 4.2.2
dumi: 1.1.47
@ -4501,7 +4501,6 @@ packages:
hasBin: true
dependencies:
cross-spawn: 7.0.3
dev: false
/cross-spawn/5.1.0:
resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}