From 5914af53f0288e5e4e092dc0f22b6a4ad18ffe5a Mon Sep 17 00:00:00 2001 From: wxzhang Date: Sun, 21 Aug 2022 21:26:12 +0800 Subject: [PATCH] update docs --- .umirc.ts | 3 + docs/src/guide/intro/versions.md | 6 +- docs/src/guide/use/datetime.md | 453 +++++++++++++++++++- package.json | 10 +- packages/cli/languages/runtime.js | 49 ++- packages/cli/package.json | 4 +- packages/runtime/__test__/translate.test.js | 2 +- packages/runtime/formatters/en.js | 32 +- packages/runtime/formatters/zh.js | 14 +- packages/runtime/package.json | 4 +- pnpm-lock.yaml | 3 +- 11 files changed, 500 insertions(+), 80 deletions(-) diff --git a/.umirc.ts b/.umirc.ts index 463708a..e15b2a3 100644 --- a/.umirc.ts +++ b/.umirc.ts @@ -13,6 +13,9 @@ export default defineConfig({ includes:["docs/src"] }, locales: [['zh-CN', '中文']], + theme:{ + "@c-heading": "#118809" + }, scripts:[` var _hmt = _hmt || []; (function() { diff --git a/docs/src/guide/intro/versions.md b/docs/src/guide/intro/versions.md index 9e8ab78..bc3b8a4 100644 --- a/docs/src/guide/intro/versions.md +++ b/docs/src/guide/intro/versions.md @@ -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插件,提供自动插件翻译函数和语言切换功能| \ No newline at end of file diff --git a/docs/src/guide/use/datetime.md b/docs/src/guide/use/datetime.md index fef3cf5..eba27e6 100644 --- a/docs/src/guide/use/datetime.md +++ b/docs/src/guide/use/datetime.md @@ -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 + + |--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:"" + short:"" + 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` diff --git a/package.json b/package.json index 7ea07e1..d1a4dad 100644 --- a/package.json +++ b/package.json @@ -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" } } diff --git a/packages/cli/languages/runtime.js b/packages/cli/languages/runtime.js index 81ff082..c43aadc 100644 --- a/packages/cli/languages/runtime.js +++ b/packages/cli/languages/runtime.js @@ -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:{ diff --git a/packages/cli/package.json b/packages/cli/package.json index ccde4dd..3f5b715 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -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" } \ No newline at end of file diff --git a/packages/runtime/__test__/translate.test.js b/packages/runtime/__test__/translate.test.js index 5f3b97e..f83a434 100644 --- a/packages/runtime/__test__/translate.test.js +++ b/packages/runtime/__test__/translate.test.js @@ -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){ diff --git a/packages/runtime/formatters/en.js b/packages/runtime/formatters/en.js index 83fb3ac..0f546f6 100644 --- a/packages/runtime/formatters/en.js +++ b/packages/runtime/formatters/en.js @@ -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}, diff --git a/packages/runtime/formatters/zh.js b/packages/runtime/formatters/zh.js index 7574242..343bf81 100644 --- a/packages/runtime/formatters/zh.js +++ b/packages/runtime/formatters/zh.js @@ -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:{ diff --git a/packages/runtime/package.json b/packages/runtime/package.json index bb9d9e6..a56f98e 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -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" } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf57cc3..c2cbdbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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==}