update formatters及生成逻辑
This commit is contained in:
parent
5b7f6bc750
commit
ac5ea795dc
17
.umirc.ts
17
.umirc.ts
@ -3,13 +3,13 @@ import { defineConfig } from 'dumi';
|
||||
// more config: https://d.umijs.org/config
|
||||
|
||||
export default defineConfig({
|
||||
title: 'VoerkaI18n全流程国际化解决方案',
|
||||
base:"/voerka-i18n/",
|
||||
publicPath:"/voerka-i18n/",
|
||||
mode: 'site',
|
||||
logo: "/voerka-i18n/images/i18n.png",
|
||||
outputPath:"docs/dist",
|
||||
resolve:{
|
||||
title : 'VoerkaI18n全流程国际化解决方案',
|
||||
base : "/voerka-i18n/",
|
||||
publicPath: "/voerka-i18n/",
|
||||
mode : 'site',
|
||||
logo : "/voerka-i18n/images/i18n.png",
|
||||
outputPath: "docs/dist",
|
||||
resolve : {
|
||||
includes:["docs/src"]
|
||||
},
|
||||
locales: [['zh-CN', '中文']],
|
||||
@ -20,7 +20,8 @@ export default defineConfig({
|
||||
ul.__dumi-default-layout-toc > li[data-depth=2] {
|
||||
font-weight: bold;
|
||||
}
|
||||
`],
|
||||
`],
|
||||
mfsu:{},
|
||||
scripts:[`
|
||||
var _hmt = _hmt || [];
|
||||
(function() {
|
||||
|
@ -1,72 +1,48 @@
|
||||
# 自定义格式化器
|
||||
# 格式化器
|
||||
|
||||
## 概念
|
||||
|
||||
当我们使用`voerkai18n compile`编译后,会生成`languages/formatters.js`文件,可以在该文件中自定义您自己的格式化器。
|
||||
格式化器是`voerkai18n`中引入的用来对待翻译内容中的插值变量进行链式处理的一种机制,目的是为不同的语言下对内容中的插值变量进行动态处理机制。格式化器机制为`voerkai18n`中的日期时间、货币等多语言输出提供了强大灵活、可扩展、可配置的处理方案。
|
||||
|
||||
`formatters.js`文件内容如下:
|
||||
格式化器具有以下特点:
|
||||
|
||||
```javascript | pure
|
||||
module.exports = {
|
||||
// 在所有语言下生效的格式化器
|
||||
"*":{
|
||||
//[格式化名称]:(value)=>{...},
|
||||
//[格式化名称]:(value,arg)=>{...},
|
||||
},
|
||||
// 在所有语言下只作用于特定数据类型的格式化器
|
||||
$types:{
|
||||
// [数据类型名称]:(value)=>{...},
|
||||
// [数据类型名称]:(value)=>{...},
|
||||
},
|
||||
zh:{
|
||||
$types:{
|
||||
// 所有类型的默认格式化器
|
||||
"*":{
|
||||
},
|
||||
Date:{},
|
||||
Number:{},
|
||||
Boolean:{ },
|
||||
String:{},
|
||||
Array:{
|
||||
- 本质上是一个普通的同步函数
|
||||
- 支持有参和无参两种调用方式
|
||||
- 支持通过管道符`|`进行链式调用
|
||||
- 可以通过`$config`为格式化器传入配置参数
|
||||
|
||||
},
|
||||
Object:{
|
||||
## 指南
|
||||
|
||||
}
|
||||
},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
//.....
|
||||
},
|
||||
en:{
|
||||
$types:{
|
||||
// [数据类型名称]:(value)=>{...},
|
||||
},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
//.....更多的格式化器.....
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 格式化器函数
|
||||
### 格式化器函数
|
||||
|
||||
**每一个格式化器就是一个普通的同步函数**,不支持异步函数,格式化器函数可以支持无参数或有参数。
|
||||
|
||||
- 无参数的格式化器:`(value)=>{....返回格式化的结果...}`。
|
||||
- 无参数的格式化器:`(value,$config)=>{....返回格式化的结果...}`。
|
||||
- 带参数的格式化器:`(value,arg1,...,$config)=>{....返回格式化的结果...}`,其中`value`是上一个格式化器的输出结果。
|
||||
|
||||
- 带参数的格式化器:`(value,arg1,...)=>{....返回格式化的结果...}`,其中`value`是上一个格式化器的输出结果。
|
||||
|
||||
## 类型格式化器
|
||||
格式化器函数的第一个参数是上一个格式化器的输出,最后一个参数是定义在`$config`中的配置参数。
|
||||
|
||||
可以为每一种数据类型指定一个默认的格式化器,支持对`String`、`Date`、`Error`、`Object`、`Array`、`Boolean`、`Number`等数据类型的格式化。
|
||||
**调用方式:**
|
||||
|
||||
当插值变量传入时,如果有定义了对应的的类型格式化器,会默认调用该格式化器对数据进行转换。
|
||||
```javascript | pure
|
||||
|
||||
t("商品价格:{ value | currency }") // 参数调用
|
||||
t("商品价格:{ value | currency('long') }") /// 有参调用
|
||||
t("商品价格:{ value | currency('long') | prefix('人民币') }") /// 有参调用且链式调用
|
||||
|
||||
```
|
||||
|
||||
### 类型格式化器
|
||||
|
||||
可以为每一种数据类型指定一个默认的格式化器,支持对`String`、`Date`、`Error`、`Object`、`Array`、`Boolean`、`Number`等数据类型的格式化。当插值变量传入时,如果有定义了对应的的类型格式化器,会默认调用该格式化器对数据进行转换。
|
||||
|
||||
比如我们定义对`Boolean`类型格式化器,
|
||||
|
||||
```javascript | pure
|
||||
//formatters.js
|
||||
|
||||
module.exports = {
|
||||
// 在所有语言下只作用于特定数据类型的格式化器
|
||||
//languages/formatters/<语言名称>.js
|
||||
export default {
|
||||
// 只作用于特定数据类型的格式化器
|
||||
$types:{
|
||||
Boolean:(value)=> value ? "ON" : "OFF"
|
||||
}
|
||||
@ -78,17 +54,16 @@ t("灯状态:{status}",false) // === 灯状态:OFF
|
||||
在上例中,如果我们想在不同的语言环境下,翻译为不同的显示文本,则可以为不同的语言指定类型格式化器
|
||||
|
||||
```javascript | pure
|
||||
//formatters.js
|
||||
module.exports = {
|
||||
zh:{
|
||||
$types:{
|
||||
Boolean:(value)=> value ? "开" : "关"
|
||||
}
|
||||
},
|
||||
en:{
|
||||
$types:{
|
||||
Boolean:(value)=> value ? "ON" : "OFF"
|
||||
}
|
||||
//languages/formatters/zh.js
|
||||
export default {
|
||||
$types:{
|
||||
Boolean:(value)=> value ? "开" : "关"
|
||||
}
|
||||
}
|
||||
//languages/formatters/en.js
|
||||
export default {
|
||||
$types:{
|
||||
Boolean:(value)=> value ? "ON" : "OFF"
|
||||
}
|
||||
}
|
||||
// 当切换到中文时
|
||||
@ -101,97 +76,125 @@ t("灯状态:{status}",false) // === 灯状态:OFF
|
||||
|
||||
**说明:**
|
||||
|
||||
- 完整的类型格式化器定义形式
|
||||
|
||||
```javascript | pure
|
||||
module.exports = {
|
||||
"*":{
|
||||
$types:{...}
|
||||
},
|
||||
zh:{
|
||||
$types:{...}
|
||||
},
|
||||
en:{
|
||||
$types:{....}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
在匹配应用格式化时会先在当前语言的`$types`中查找匹配的格式化器,如果找不到再上`*.$types`中查找。
|
||||
|
||||
- `*.$types`代表当所有语言中均没有定义时才匹配的类型格式化。
|
||||
|
||||
- 在匹配应用格式化时会先在当前语言的`$types`中查找匹配的格式化器。
|
||||
- 类型格式化器是**默认执行的,不需要指定名称**。
|
||||
|
||||
- 当前作用域的格式化器优先于全局的格式化器。
|
||||
- 当指定了其他格式化器时,类型格式化器就失败,比如`t("灯状态:{status | xxx}",true)`时,上面定义的`$types.Boolean`就无效。
|
||||
|
||||
## 通用的格式化器
|
||||
### 通用的格式化器
|
||||
|
||||
类型格式化器只针对特定数据类型,并且会默认调用。而通用的格式化器需要使用`|`管道符进行显式调用。
|
||||
|
||||
同样的,通用的格式化器定义在`languages/formatters.js`中。
|
||||
同样的,通用的格式化器定义在`languages/formatters/<语言名称>.js`中。
|
||||
|
||||
```javascript | pure
|
||||
module.exports = {
|
||||
"*":{
|
||||
$types:{...},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
},
|
||||
zh:{
|
||||
$types:{...},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
},
|
||||
en:{
|
||||
$types:{....},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
[格式化名称]:(value,arg)=>{.....},
|
||||
}
|
||||
|
||||
// languages/formatters/zh.js
|
||||
export default {
|
||||
$config:{...},
|
||||
$types:{...},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
}
|
||||
// languages/formatters/en.js
|
||||
export default {
|
||||
$config:{...},
|
||||
$types:{....},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
[格式化名称]:(value,arg)=>{.....},
|
||||
}
|
||||
```
|
||||
|
||||
每一个格式化器均需要指定一个名称,在进行插值替换时会优先依据当前语言来匹配查找格式化器,如果找不到,再到键名为`*`中查找。
|
||||
如果要注册在所有语言中均生效的,可以声明在`languages/formatters/global.js`
|
||||
|
||||
```javascript | pure
|
||||
module.exports = {
|
||||
"*":{
|
||||
uppercase:(value)=>value
|
||||
},
|
||||
zh:{
|
||||
uppercase:(value)=>["一","二","三","四","五","六","七","八","九","十"][value-1]
|
||||
},
|
||||
en:{
|
||||
uppercase:(value)=>["One","Two","Three","Four","Five","Six","seven","eight","nine","ten"][value-1]
|
||||
},
|
||||
jp:{
|
||||
|
||||
}
|
||||
// languages/formatters/global.js
|
||||
export default {
|
||||
$config:{...},
|
||||
$types:{....},
|
||||
[格式化名称]:(value)=>{.....},
|
||||
[格式化名称]:(value,arg)=>{.....},
|
||||
}
|
||||
```
|
||||
|
||||
```javascript | pure
|
||||
// 当切换到中文时
|
||||
t("{value | uppercase}",1) // == 一
|
||||
t("{value | uppercase}",2) // == 二
|
||||
t("{value | uppercase}",3) // == 三
|
||||
|
||||
// 当切换到英文时
|
||||
t("{value | uppercase}",1) // == One
|
||||
t("{value | uppercase}",2) // == Two
|
||||
t("{value | uppercase}",3) // == Three
|
||||
// 当切换到日文时,由于在该语言下没有定义uppercase格式式,因此到*中查找
|
||||
|
||||
// 当切换到日文时,由于在该语言下没有定义uppercase,因此到global中查找
|
||||
t("{value | uppercase}",1) // == 1
|
||||
t("{value | uppercase}",2) // == 2
|
||||
t("{value | uppercase}",3) // == 3
|
||||
```
|
||||
|
||||
## 作用域格式化器
|
||||
|
||||
定义在`languages/formatters.js`里面的格式化器仅在当前工程生效,也就是仅在当前作用域生效。一般由应用开发者自行扩展。
|
||||
### 自定义格式化器
|
||||
|
||||
## 全局格式化器
|
||||
当使用`voerkai18n compile`后,项目结构中会生成`formatters`如下:
|
||||
|
||||
```javascript | pure
|
||||
<myapp>
|
||||
|--src
|
||||
| |-- languages
|
||||
| | |-- formatters
|
||||
| | | |-- zh.js
|
||||
| | | |-- en.js
|
||||
| | | |-- de.js
|
||||
|
||||
....
|
||||
```
|
||||
您可以在`formatters`文件夹中的`zh.js`、`en.js`、`de.js`文件中配置或者增加自己的自定义的格式化器。
|
||||
|
||||
`languages/formatters/<语言名称>.js`内容大概如下:
|
||||
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config:{
|
||||
// 在此配置各格式化器的参数
|
||||
},
|
||||
// 在所有语言下只作用于特定数据类型的格式化器
|
||||
$types:{
|
||||
// [数据类型名称]:(value)=>{...},
|
||||
// [数据类型名称]:(value)=>{...},
|
||||
},
|
||||
// 自定义的格式化器
|
||||
[格式化名称]:(value,$config)=>{.....},
|
||||
[格式化名称]:(value,$config)=>{.....},
|
||||
[格式化名称]:(value,$config)=>{.....},
|
||||
//.....更多的格式化器.....
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### 配置机制
|
||||
|
||||
|
||||
|
||||
|
||||
### 格式化器作用域
|
||||
|
||||
定义在`languages/formatters/<语言名称>.js`里面的格式化器仅在当前工程生效,也就是仅在当前作用域生效。
|
||||
|
||||
|
||||
### 全局格式化器
|
||||
|
||||
定义在`@voerkai18n/runtime`里面的格式化器则全局有效,在所有场合均可以使用,但是其优先级低于作用域内的同名格式化器。
|
||||
|
||||
目前内置的全局格式化器请参阅API参考
|
||||
|
||||
## 扩展格式化器
|
||||
### 扩展格式化器
|
||||
|
||||
除了可以在当前项目`languages/formatters.js`自定义格式化器和`@voerkai18n/runtime`里面的全局格式化器外,单列了`@voerkai18n/formatters`项目用来包含了更多的格式化器。
|
||||
除了可以在当前项目`languages/formatters/<语言名称>.js`自定义格式化器和`@voerkai18n/runtime`里面的全局格式化器外,计划单列了`@voerkai18n/formatters`项目用来包含了一些不常用的格式化器。
|
||||
|
||||
目前`@voerkai18n/formatters`还是空项目,作为开源项目,欢迎大家提交贡献更多的格式化器。
|
||||
|
||||
|
||||
|
||||
## 开发格式化器
|
||||
|
||||
作为开源项目,欢迎大家提交贡献更多的格式化器。
|
||||
|
@ -3,26 +3,8 @@
|
||||
|
||||
`voerkai18n`内置支持`currency`和`rmb`两个货币相关的格式化器,用来输出多语言场景下的货币显示。
|
||||
|
||||
- **货币组成**
|
||||
|
||||
为了支持灵活的货币格式输出,`currency`格式化器将一个完整的货币字符串划分为五部分:
|
||||
|
||||
| 前缀 | 符号 | 值 | 单位 | 后缀 |
|
||||
| :---: | :---: | :---: | :---: | :---: |
|
||||
| prefix | symbol | value | unit | suffix |
|
||||
|
||||
货币表示可以由`prefix`、`symbol`、`value`、`unit`、`suffix`五部份组成。然后,可以配置一个`format`模板字符串来输出货币。
|
||||
|
||||
不同语言或不同的应用场景,可以通过配置`format`模板字符串,自由组合货币输出格式。
|
||||
|
||||
|
||||
**例:**
|
||||
|
||||
- `format = "{symbol} {value}{unit}"` ==> `¥123.45元`
|
||||
- `format = "{prefix} {symbol} {value}{unit}"` ==> `人民币:¥123.45元`
|
||||
|
||||
|
||||
## 基本用法
|
||||
## 指南
|
||||
### 基本用法
|
||||
|
||||
当需要对货币本地化显示时,请使用相对应的`currency`格式化器,可以在`t`函数中使用来对`Number`类型进行本地化格式输出。
|
||||
|
||||
@ -80,14 +62,24 @@
|
||||
t("{ value | currency({format:'long',suffix:'<后缀>'})}",1234.56)
|
||||
```
|
||||
|
||||
## 格式化器
|
||||
### **货币组成**
|
||||
|
||||
为了支持灵活的货币格式输出,`currency`格式化器将一个完整的货币字符串划分为五部分:
|
||||
|
||||
| 前缀 | 符号 | 值 | 单位 | 后缀 |
|
||||
| :---: | :---: | :---: | :---: | :---: |
|
||||
| prefix | symbol | value | unit | suffix |
|
||||
|
||||
货币表示可以由`prefix`、`symbol`、`value`、`unit`、`suffix`五部份组成。然后,可以配置一个`format`模板字符串,该模板字符串可以由五个占位符(`{prefix}`、`{symbol}`、`{value}`、`{unit}`、`{suffix}`)自由组合来输出货币。
|
||||
|
||||
### 通用货币 - `currency`
|
||||
并且不同语言或不同的应用场景,可以通过配置`format`模板字符串,自由组合货币输出格式。
|
||||
|
||||
#### 参数
|
||||
**例:**
|
||||
|
||||
- `format = "{symbol} {value}{unit}"` ==> `¥123.45元`
|
||||
- `format = "{prefix} {symbol} {value}{unit}"` ==> `人民币:¥123.45元`
|
||||
|
||||
### 参数
|
||||
`currency`格式化器支持参数:
|
||||
|
||||
|
||||
@ -119,7 +111,7 @@
|
||||
而中文`radix=4`,就对应`万`、`亿`、`万亿`、...
|
||||
也说是说,`radix`参数仅当指定`unit`值`>0`时用来计算出合适的单位使用的。
|
||||
|
||||
**示例:**
|
||||
### **示例**
|
||||
|
||||
当`activeLanguage='zh'`时,`radix=4`,units = ["","万","亿","万亿","万万亿"]
|
||||
|
||||
@ -183,7 +175,7 @@
|
||||
t("{ value | currency('short',4)}",123456789.88) // $0.00012345678988 trillions
|
||||
```
|
||||
|
||||
#### 配置
|
||||
### 配置
|
||||
|
||||
- **配置文件**:`languages/formatters/<语言名称>.js`
|
||||
- **配置位置**: `$config.currency`
|
||||
@ -225,9 +217,9 @@ t("我有{value | currency({format:'bitcoin',symbol:'฿') }个比特币",123443
|
||||
|
||||
```
|
||||
|
||||
## 人民币 - `rmb`
|
||||
### 人民币 - `rmb`
|
||||
|
||||
用来输出中文货币,这个格式化器事实上跟国际化关系不大,在其中语言中不存在对应的翻译。
|
||||
用来输出中文货币,这个格式化器事实上跟国际化关系不大,在其他语言中不存在对应的翻译。
|
||||
|
||||
```javascript | pure
|
||||
// 中文数字 = 一亿二千三百四十五万六千七百八十九元八角八分
|
||||
@ -237,3 +229,134 @@ t("{value |rmb(true) }",123456789.88)
|
||||
// 自定义格式 = 人民币:壹億貳仟參佰肆拾伍萬陸仟柒佰捌拾玖元捌角捌分整
|
||||
t("{value |rmb({big:true,prefix:'人民币:', unit:'元',suffix:'整'})}",123456789.88)
|
||||
```
|
||||
|
||||
## 扩展配置
|
||||
|
||||
`voerkai18n`运行时已经内置了`zh`、`en`两种语言的货币输出的格式化器,主要是`currency`格式式化器,该格式化器被设计为可以进行配置。当以上格式化器不能满足要求,或者缺少某种语言的货币格式化时,可以非常容易地进行扩展。
|
||||
|
||||
扩展支持不同语言言的日期时间格式化非常简单,当使用`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`时会发现里面是空的(除了一些注释外)。内容大概如下:
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config:{
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
接下来,我们只需要在`languages/formatters/<语言名称>.js`文件中按需调整货币格式化的配置参数即可。比如:
|
||||
|
||||
- **我们想让`zh`语言的默认格式采用`long`格式,则需要修改:**
|
||||
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config:{
|
||||
datetime:{
|
||||
currency:{
|
||||
format : "long",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- **将修改德国的货币符号为`€`**
|
||||
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config:{
|
||||
datetime:{
|
||||
currency:{
|
||||
symbol : "€",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- **修改中文`long`预设格式**
|
||||
|
||||
中文`long`预设格式是`{prefix} {symbol}{value}{unit}{suffix}`,修改为`RMB {symbol}{value}元`.则需要修改`languages/formatters/zh.js`,如下:
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config:{
|
||||
datetime:{
|
||||
currency:{
|
||||
long : "RMB {symbol}{value}元",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
那么`t("{value | currency('long')}",123.88)`将输出`RMB 123.88元`。
|
||||
|
||||
完整的配置项见下文。
|
||||
|
||||
### **增加格式化规则**
|
||||
目前,`voerkai18n`只内置了`zh`,`en`两种语言的货币规则支持。其中,`en`语言的货币格式化器被注册到全局。当切换到`zh`,`en`两种语言之外的其他语言时,会使用`en`语言的货币格式化规则。
|
||||
|
||||
很明显,`en`语言的日期时间格式化规则并不能适应所有语言的要求,在官方提供该语言支持前,您可以自行配置语言支持。
|
||||
|
||||
方法很简单,以`de`语言为例,打开`languages/formatters/de.js`文件。
|
||||
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config:{
|
||||
datetime:{
|
||||
date:{
|
||||
long:"<de语言的长格式货币模板>"
|
||||
short:"<de语言的短格式货币模板>"
|
||||
format:"long" // 默认使用long格式,也可以使用一个模板字符串
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
这样,当切换到`de`语言时,date格式化器就会读取`languages/formatters/de.js`文件中的配置,从而实现符合要求的`de`语言的货币格式化。
|
||||
|
||||
### **扩展预设规则**
|
||||
|
||||
除了预设的`long`、`short`、`default`、`custom`等规则外,您可以通过模板字符串来自定义更加灵活的格式化规则。
|
||||
您也可以自己定义一个预设格式化规则。
|
||||
|
||||
比如可以定义一个`rmb`的规则来显示更加完整的人民币,方法如下:
|
||||
在`languages/formatters/zh.json`中,增加一个`rmb`配置项即可。
|
||||
```javascript | pure
|
||||
export default {
|
||||
$config: {
|
||||
rmb: "人民币: {symbol}{value}元整"
|
||||
}
|
||||
}
|
||||
```
|
||||
有了自定义的`rmb`预设规则,应用中就可以直接使用`t("现在是{ value | currency('rmb') }") `进行格式化,而不需要使用自定义模板字符串的形式。
|
@ -42,6 +42,27 @@ function normalizeCompileOptions(opts={}) {
|
||||
return options;
|
||||
}
|
||||
|
||||
function generateFormatterFile(langName,{formattersFolder,templateContext,moduleType}={}){
|
||||
const formattersFile = path.join(formattersFolder,`${langName}.js`)
|
||||
if(!fs.existsSync(formattersFile)){
|
||||
const formattersContent = artTemplate(path.join(__dirname,"templates","formatters.js"), templateContext )
|
||||
fs.writeFileSync(formattersFile,formattersContent)
|
||||
logger.log(t(" - 格式化器:{}"),path.basename(formattersFile))
|
||||
}else{ // 格式化器如果存在,则需要更改对应的模块类型
|
||||
let formattersContent = fs.readFileSync(formattersFile,"utf8").toString()
|
||||
if(moduleType == "esm"){
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*module.exports\s*\=/gm,"export default ")
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*module.exports\./gm,"export ")
|
||||
}else{
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*export\s*default\s*/gm,"module.exports = ")
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*export\s*/gm,"module.exports.")
|
||||
}
|
||||
fs.writeFileSync(formattersFile,formattersContent)
|
||||
logger.log(t(" - 更新格式化器:{}"),path.basename(formattersFile))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module.exports =async function compile(langFolder,opts={}){
|
||||
const options = normalizeCompileOptions(opts);
|
||||
let { moduleType,inlineRuntime } = options;
|
||||
@ -144,49 +165,15 @@ module.exports =async function compile(langFolder,opts={}){
|
||||
JSON,
|
||||
settings:JSON.stringify(langSettings,null,4)
|
||||
}
|
||||
|
||||
// 5 . 生成编译后的格式化函数文件
|
||||
// const formattersFile = path.join(langFolder,"formatters.js")
|
||||
// if(!fs.existsSync(formattersFile)){
|
||||
// const formattersContent = artTemplate(path.join(__dirname,"templates","formatters.js"), templateContext )
|
||||
// fs.writeFileSync(formattersFile,formattersContent)
|
||||
// logger.log(t(" - 格式化器:{}"),path.basename(formattersFile))
|
||||
// }else{ // 格式化器如果存在,则需要更改对应的模块类型
|
||||
// let formattersContent = fs.readFileSync(formattersFile,"utf8").toString()
|
||||
// if(moduleType == "esm"){
|
||||
// formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*module.exports\s*\=/gm,"export default ")
|
||||
// formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*module.exports\./gm,"export ")
|
||||
// }else{
|
||||
// formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*export\s*default\s*/gm,"module.exports = ")
|
||||
// formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*export\s*/gm,"module.exports.")
|
||||
// }
|
||||
// fs.writeFileSync(formattersFile,formattersContent)
|
||||
// logger.log(t(" - 更新格式化器:{}"),path.basename(formattersFile))
|
||||
// }
|
||||
|
||||
const formattersFolder = path.join(langFolder,"formatters")
|
||||
if(!fs.existsSync(formattersFolder)) fs.mkdirSync(formattersFolder)
|
||||
// 为每一个语言生成一个对应的式化器
|
||||
languages.forEach(lang=>{
|
||||
const formattersFile = path.join(formattersFolder,`${lang.name}.js`)
|
||||
if(!fs.existsSync(formattersFile)){
|
||||
const formattersContent = artTemplate(path.join(__dirname,"templates","formatters.js"), templateContext )
|
||||
fs.writeFileSync(formattersFile,formattersContent)
|
||||
logger.log(t(" - 格式化器:{}"),path.basename(formattersFile))
|
||||
}else{ // 格式化器如果存在,则需要更改对应的模块类型
|
||||
let formattersContent = fs.readFileSync(formattersFile,"utf8").toString()
|
||||
if(moduleType == "esm"){
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*module.exports\s*\=/gm,"export default ")
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*module.exports\./gm,"export ")
|
||||
}else{
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*export\s*default\s*/gm,"module.exports = ")
|
||||
formattersContent = formattersContent.replaceAll(/^[^\n\r\w]*export\s*/gm,"module.exports.")
|
||||
}
|
||||
fs.writeFileSync(formattersFile,formattersContent)
|
||||
logger.log(t(" - 更新格式化器:{}"),path.basename(formattersFile))
|
||||
}
|
||||
generateFormatterFile(lang.name,{formattersFolder,templateContext,moduleType})
|
||||
})
|
||||
|
||||
templateContext.comments = "注册到全局的格式化器"
|
||||
generateFormatterFile("global",{formattersFolder,templateContext,moduleType})
|
||||
|
||||
// 6. 生成编译后的访问入口文件
|
||||
const entryFile = path.join(langFolder,"index.js")
|
||||
|
@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
"1": "支持的语言\t: {}",
|
||||
"2": "默认语言\t: {}",
|
||||
"3": "激活语言\t: {}",
|
||||
|
@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
"1": "Supported languages\t: {}",
|
||||
"2": "Default language\t: {}",
|
||||
"3": "Active language\t\t: {}",
|
||||
|
@ -1,69 +1,106 @@
|
||||
/**
|
||||
|
||||
|
||||
|
||||
格式化器用来对翻译文本内容中的插值变量进行处理
|
||||
|
||||
比如将一个数字格式化为货币格式,或者将一个日期格式化为友好的日期格式。
|
||||
如何编写格式器请参阅官网!
|
||||
|
||||
- 以下定义了一些格式化器,在中文场景下,会启用这些格式化器。
|
||||
import dayjs from "dayjs";
|
||||
module.exports = {
|
||||
$config:{...},
|
||||
$types:{
|
||||
Date:(value)=>dayjs(value).format("YYYY年MM月DD日 HH:mm:ss"),
|
||||
},
|
||||
date:(value)=>dayjs(value).format("YYYY年MM月DD日")
|
||||
bjTime:(value)=>"北京时间"+ value,
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
}
|
||||
}
|
||||
- 在翻译函数中使用格式化器的方法,示例如下:
|
||||
|
||||
t("Now is { value | date | bjTime }",{value: new Date()})
|
||||
其等效于:
|
||||
t(`Now is ${bjTime(date(value))",{value: new Date()})
|
||||
由于value分别经过两个管道符转换,上一个管道符的输出作为下一个管道符的输入,可以多次使用管道符。
|
||||
最终的输出结果:
|
||||
中文: "现在是北京时间2022年3月1日"
|
||||
英文: "Now is BeiJing 2022/03/01"
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
// 格式化器参数
|
||||
$config:{
|
||||
|
||||
},
|
||||
// 指定数据类型的默认格式化器
|
||||
$types:{
|
||||
// "*" : { },
|
||||
// Date : { },
|
||||
// Number: { },
|
||||
// String: { },
|
||||
// Array : { },
|
||||
// Object: { }
|
||||
}
|
||||
// 允许重载内置的格式化器
|
||||
// --- 日期 ------
|
||||
// date : value => { ... },
|
||||
// shortdate : value => { ... },
|
||||
// time : value => { ... },
|
||||
// shorttime : value => { ... },
|
||||
// year : value => { ... },
|
||||
// month : value => { ... },
|
||||
// day : value => { ... },
|
||||
// weekdayValue : value => { ... },
|
||||
// weekday : value => { ... },
|
||||
// shortWeekday : value => { ... },
|
||||
// monthName : value => { ... },
|
||||
// shorMonthName : value => { ... },
|
||||
// --- 时间 ------
|
||||
// hour : value => { ... },
|
||||
// hour12 : value => { ... },
|
||||
// minute : value => { ... },
|
||||
// second : value => { ... },
|
||||
// millisecond : value => { ... },
|
||||
// timestamp : value => { ... },
|
||||
// currency : value => { ... },
|
||||
// number : value => { ... },
|
||||
// import { Formatter,FlexFormatter } from "./runtime"
|
||||
export default {
|
||||
// 直接对内置格式化器进行配置,请参阅官网文档
|
||||
// $config:{
|
||||
// datetime : {
|
||||
// units : ["Year","Quarter","Month","Week","Day","Hour","Minute","Second","Millisecond","Microsecond"],
|
||||
// date :{
|
||||
// long : 'YYYY/MM/DD HH:mm:ss',
|
||||
// short : "YYYY/MM/DD",
|
||||
// format : "local"
|
||||
// },
|
||||
// quarter : {
|
||||
// long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
|
||||
// short : ["Q1","Q2","Q3","Q4"],
|
||||
// format : "short"
|
||||
// },
|
||||
// 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 : "long" // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// weekday:{
|
||||
// long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||
// short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
|
||||
// format : "long", // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// time : {
|
||||
// long : "HH:mm:ss",
|
||||
// short : "HH:mm:ss",
|
||||
// format : 'local'
|
||||
// },
|
||||
// timeSlots : {
|
||||
// slots : [12],
|
||||
// lowerCases : ["am","pm"],
|
||||
// upperCases : ["AM","PM"]
|
||||
// },
|
||||
// relativeTime : {
|
||||
// units : ["seconds","minutes","hours","days","weeks","months","years"],
|
||||
// now : "Now",
|
||||
// before : "{value} {unit} ago",
|
||||
// after : "after {value} {unit}"
|
||||
// }
|
||||
// },
|
||||
// currency : {
|
||||
// default : "{symbol}{value}{unit}",
|
||||
// long : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// short : "{symbol}{value}{unit}",
|
||||
// custom : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// format : "default",
|
||||
// //--
|
||||
// units : [""," thousands"," millions"," billions"," trillions"], //千,百万,十亿,万亿
|
||||
// radix : 3, // 进制,即三位一进,中文是4位一进
|
||||
// symbol : "$", // 符号
|
||||
// prefix : "USD", // 前缀
|
||||
// suffix : "", // 后缀
|
||||
// division : 3, // ,分割位
|
||||
// precision : 2, // 精度
|
||||
|
||||
// },
|
||||
// number : {
|
||||
// division : 3, // , 分割位,3代表每3位添加一个,
|
||||
// precision : 0 // 精度,即保留小数点位置,0代表不限
|
||||
// },
|
||||
// empty:{
|
||||
// //values : [], // 可选,定义空值,如果想让0,''也为空值,可以指定values=[0,'']
|
||||
// escape : "", // 当空值时显示的备用值
|
||||
// next : 'break' // 当空值时下一步的行为: break=中止;skip=跳过
|
||||
// },
|
||||
// error : {
|
||||
// //当错误时显示的内容,支持的插值变量有message=错误信息,error=错误类名,也可以是一个返回上面内容的同步函数
|
||||
// escape : null, // 默认当错误时显示空内容
|
||||
// next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
// },
|
||||
// fileSize:{
|
||||
// brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
// whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
// precision: 2 // 小数精度
|
||||
// }
|
||||
// },
|
||||
// 改变特定数据类型的默认格式化器
|
||||
// $types:{
|
||||
// Date : dateFormatter,
|
||||
// Null : value =>"",
|
||||
// Undefined: value =>"",
|
||||
// Error : value => "ERROR",
|
||||
// Boolean : value =>value ? "True":"False",
|
||||
// Number : numberFormartter
|
||||
// }
|
||||
// 以下可以自定义编写格式化器
|
||||
// xxxx : value => { ... },
|
||||
// xxxx : (value,$config) => { ... },
|
||||
// xxxx : (value,...args,$config) => { ... },
|
||||
// xxxx : Formatter(value,...args,$config) => { ... },
|
||||
// xxxx : FlexFormatter(value,params,$config) => { ... },
|
||||
}
|
||||
|
@ -1,69 +1,106 @@
|
||||
/**
|
||||
|
||||
|
||||
|
||||
格式化器用来对翻译文本内容中的插值变量进行处理
|
||||
|
||||
比如将一个数字格式化为货币格式,或者将一个日期格式化为友好的日期格式。
|
||||
如何编写格式器请参阅官网!
|
||||
|
||||
- 以下定义了一些格式化器,在中文场景下,会启用这些格式化器。
|
||||
import dayjs from "dayjs";
|
||||
module.exports = {
|
||||
$config:{...},
|
||||
$types:{
|
||||
Date:(value)=>dayjs(value).format("YYYY年MM月DD日 HH:mm:ss"),
|
||||
},
|
||||
date:(value)=>dayjs(value).format("YYYY年MM月DD日")
|
||||
bjTime:(value)=>"北京时间"+ value,
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
}
|
||||
}
|
||||
- 在翻译函数中使用格式化器的方法,示例如下:
|
||||
|
||||
t("Now is { value | date | bjTime }",{value: new Date()})
|
||||
其等效于:
|
||||
t(`Now is ${bjTime(date(value))",{value: new Date()})
|
||||
由于value分别经过两个管道符转换,上一个管道符的输出作为下一个管道符的输入,可以多次使用管道符。
|
||||
最终的输出结果:
|
||||
中文: "现在是北京时间2022年3月1日"
|
||||
英文: "Now is BeiJing 2022/03/01"
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
// 格式化器参数
|
||||
$config:{
|
||||
|
||||
},
|
||||
// 指定数据类型的默认格式化器
|
||||
$types:{
|
||||
// "*" : { },
|
||||
// Date : { },
|
||||
// Number: { },
|
||||
// String: { },
|
||||
// Array : { },
|
||||
// Object: { }
|
||||
}
|
||||
// 允许重载内置的格式化器
|
||||
// --- 日期 ------
|
||||
// date : value => { ... },
|
||||
// shortdate : value => { ... },
|
||||
// time : value => { ... },
|
||||
// shorttime : value => { ... },
|
||||
// year : value => { ... },
|
||||
// month : value => { ... },
|
||||
// day : value => { ... },
|
||||
// weekdayValue : value => { ... },
|
||||
// weekday : value => { ... },
|
||||
// shortWeekday : value => { ... },
|
||||
// monthName : value => { ... },
|
||||
// shorMonthName : value => { ... },
|
||||
// --- 时间 ------
|
||||
// hour : value => { ... },
|
||||
// hour12 : value => { ... },
|
||||
// minute : value => { ... },
|
||||
// second : value => { ... },
|
||||
// millisecond : value => { ... },
|
||||
// timestamp : value => { ... },
|
||||
// currency : value => { ... },
|
||||
// number : value => { ... },
|
||||
// import { Formatter,FlexFormatter } from "./runtime"
|
||||
export default {
|
||||
// 直接对内置格式化器进行配置,请参阅官网文档
|
||||
// $config:{
|
||||
// datetime : {
|
||||
// units : ["Year","Quarter","Month","Week","Day","Hour","Minute","Second","Millisecond","Microsecond"],
|
||||
// date :{
|
||||
// long : 'YYYY/MM/DD HH:mm:ss',
|
||||
// short : "YYYY/MM/DD",
|
||||
// format : "local"
|
||||
// },
|
||||
// quarter : {
|
||||
// long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
|
||||
// short : ["Q1","Q2","Q3","Q4"],
|
||||
// format : "short"
|
||||
// },
|
||||
// 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 : "long" // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// weekday:{
|
||||
// long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||
// short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
|
||||
// format : "long", // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// time : {
|
||||
// long : "HH:mm:ss",
|
||||
// short : "HH:mm:ss",
|
||||
// format : 'local'
|
||||
// },
|
||||
// timeSlots : {
|
||||
// slots : [12],
|
||||
// lowerCases : ["am","pm"],
|
||||
// upperCases : ["AM","PM"]
|
||||
// },
|
||||
// relativeTime : {
|
||||
// units : ["seconds","minutes","hours","days","weeks","months","years"],
|
||||
// now : "Now",
|
||||
// before : "{value} {unit} ago",
|
||||
// after : "after {value} {unit}"
|
||||
// }
|
||||
// },
|
||||
// currency : {
|
||||
// default : "{symbol}{value}{unit}",
|
||||
// long : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// short : "{symbol}{value}{unit}",
|
||||
// custom : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// format : "default",
|
||||
// //--
|
||||
// units : [""," thousands"," millions"," billions"," trillions"], //千,百万,十亿,万亿
|
||||
// radix : 3, // 进制,即三位一进,中文是4位一进
|
||||
// symbol : "$", // 符号
|
||||
// prefix : "USD", // 前缀
|
||||
// suffix : "", // 后缀
|
||||
// division : 3, // ,分割位
|
||||
// precision : 2, // 精度
|
||||
|
||||
// },
|
||||
// number : {
|
||||
// division : 3, // , 分割位,3代表每3位添加一个,
|
||||
// precision : 0 // 精度,即保留小数点位置,0代表不限
|
||||
// },
|
||||
// empty:{
|
||||
// //values : [], // 可选,定义空值,如果想让0,''也为空值,可以指定values=[0,'']
|
||||
// escape : "", // 当空值时显示的备用值
|
||||
// next : 'break' // 当空值时下一步的行为: break=中止;skip=跳过
|
||||
// },
|
||||
// error : {
|
||||
// //当错误时显示的内容,支持的插值变量有message=错误信息,error=错误类名,也可以是一个返回上面内容的同步函数
|
||||
// escape : null, // 默认当错误时显示空内容
|
||||
// next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
// },
|
||||
// fileSize:{
|
||||
// brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
// whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
// precision: 2 // 小数精度
|
||||
// }
|
||||
// },
|
||||
// 改变特定数据类型的默认格式化器
|
||||
// $types:{
|
||||
// Date : dateFormatter,
|
||||
// Null : value =>"",
|
||||
// Undefined: value =>"",
|
||||
// Error : value => "ERROR",
|
||||
// Boolean : value =>value ? "True":"False",
|
||||
// Number : numberFormartter
|
||||
// }
|
||||
// 以下可以自定义编写格式化器
|
||||
// xxxx : value => { ... },
|
||||
// xxxx : (value,$config) => { ... },
|
||||
// xxxx : (value,...args,$config) => { ... },
|
||||
// xxxx : Formatter(value,...args,$config) => { ... },
|
||||
// xxxx : FlexFormatter(value,params,$config) => { ... },
|
||||
}
|
||||
|
106
packages/cli/languages/formatters/global.js
Normal file
106
packages/cli/languages/formatters/global.js
Normal file
@ -0,0 +1,106 @@
|
||||
/**
|
||||
|
||||
注册到全局的格式化器
|
||||
|
||||
格式化器用来对翻译文本内容中的插值变量进行处理
|
||||
|
||||
如何编写格式器请参阅官网!
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// import { Formatter,FlexFormatter } from "./runtime"
|
||||
export default {
|
||||
// 直接对内置格式化器进行配置,请参阅官网文档
|
||||
// $config:{
|
||||
// datetime : {
|
||||
// units : ["Year","Quarter","Month","Week","Day","Hour","Minute","Second","Millisecond","Microsecond"],
|
||||
// date :{
|
||||
// long : 'YYYY/MM/DD HH:mm:ss',
|
||||
// short : "YYYY/MM/DD",
|
||||
// format : "local"
|
||||
// },
|
||||
// quarter : {
|
||||
// long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
|
||||
// short : ["Q1","Q2","Q3","Q4"],
|
||||
// format : "short"
|
||||
// },
|
||||
// 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 : "long" // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// weekday:{
|
||||
// long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||
// short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
|
||||
// format : "long", // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// time : {
|
||||
// long : "HH:mm:ss",
|
||||
// short : "HH:mm:ss",
|
||||
// format : 'local'
|
||||
// },
|
||||
// timeSlots : {
|
||||
// slots : [12],
|
||||
// lowerCases : ["am","pm"],
|
||||
// upperCases : ["AM","PM"]
|
||||
// },
|
||||
// relativeTime : {
|
||||
// units : ["seconds","minutes","hours","days","weeks","months","years"],
|
||||
// now : "Now",
|
||||
// before : "{value} {unit} ago",
|
||||
// after : "after {value} {unit}"
|
||||
// }
|
||||
// },
|
||||
// currency : {
|
||||
// default : "{symbol}{value}{unit}",
|
||||
// long : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// short : "{symbol}{value}{unit}",
|
||||
// custom : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// format : "default",
|
||||
// //--
|
||||
// units : [""," thousands"," millions"," billions"," trillions"], //千,百万,十亿,万亿
|
||||
// radix : 3, // 进制,即三位一进,中文是4位一进
|
||||
// symbol : "$", // 符号
|
||||
// prefix : "USD", // 前缀
|
||||
// suffix : "", // 后缀
|
||||
// division : 3, // ,分割位
|
||||
// precision : 2, // 精度
|
||||
|
||||
// },
|
||||
// number : {
|
||||
// division : 3, // , 分割位,3代表每3位添加一个,
|
||||
// precision : 0 // 精度,即保留小数点位置,0代表不限
|
||||
// },
|
||||
// empty:{
|
||||
// //values : [], // 可选,定义空值,如果想让0,''也为空值,可以指定values=[0,'']
|
||||
// escape : "", // 当空值时显示的备用值
|
||||
// next : 'break' // 当空值时下一步的行为: break=中止;skip=跳过
|
||||
// },
|
||||
// error : {
|
||||
// //当错误时显示的内容,支持的插值变量有message=错误信息,error=错误类名,也可以是一个返回上面内容的同步函数
|
||||
// escape : null, // 默认当错误时显示空内容
|
||||
// next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
// },
|
||||
// fileSize:{
|
||||
// brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
// whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
// precision: 2 // 小数精度
|
||||
// }
|
||||
// },
|
||||
// 改变特定数据类型的默认格式化器
|
||||
// $types:{
|
||||
// Date : dateFormatter,
|
||||
// Null : value =>"",
|
||||
// Undefined: value =>"",
|
||||
// Error : value => "ERROR",
|
||||
// Boolean : value =>value ? "True":"False",
|
||||
// Number : numberFormartter
|
||||
// }
|
||||
// 以下可以自定义编写格式化器
|
||||
// xxxx : value => { ... },
|
||||
// xxxx : (value,$config) => { ... },
|
||||
// xxxx : (value,...args,$config) => { ... },
|
||||
// xxxx : Formatter(value,...args,$config) => { ... },
|
||||
// xxxx : FlexFormatter(value,params,$config) => { ... },
|
||||
}
|
@ -1,69 +1,106 @@
|
||||
/**
|
||||
|
||||
|
||||
|
||||
格式化器用来对翻译文本内容中的插值变量进行处理
|
||||
|
||||
比如将一个数字格式化为货币格式,或者将一个日期格式化为友好的日期格式。
|
||||
如何编写格式器请参阅官网!
|
||||
|
||||
- 以下定义了一些格式化器,在中文场景下,会启用这些格式化器。
|
||||
import dayjs from "dayjs";
|
||||
module.exports = {
|
||||
$config:{...},
|
||||
$types:{
|
||||
Date:(value)=>dayjs(value).format("YYYY年MM月DD日 HH:mm:ss"),
|
||||
},
|
||||
date:(value)=>dayjs(value).format("YYYY年MM月DD日")
|
||||
bjTime:(value)=>"北京时间"+ value,
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
}
|
||||
}
|
||||
- 在翻译函数中使用格式化器的方法,示例如下:
|
||||
|
||||
t("Now is { value | date | bjTime }",{value: new Date()})
|
||||
其等效于:
|
||||
t(`Now is ${bjTime(date(value))",{value: new Date()})
|
||||
由于value分别经过两个管道符转换,上一个管道符的输出作为下一个管道符的输入,可以多次使用管道符。
|
||||
最终的输出结果:
|
||||
中文: "现在是北京时间2022年3月1日"
|
||||
英文: "Now is BeiJing 2022/03/01"
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
// 格式化器参数
|
||||
$config:{
|
||||
|
||||
},
|
||||
// 指定数据类型的默认格式化器
|
||||
$types:{
|
||||
// "*" : { },
|
||||
// Date : { },
|
||||
// Number: { },
|
||||
// String: { },
|
||||
// Array : { },
|
||||
// Object: { }
|
||||
}
|
||||
// 允许重载内置的格式化器
|
||||
// --- 日期 ------
|
||||
// date : value => { ... },
|
||||
// shortdate : value => { ... },
|
||||
// time : value => { ... },
|
||||
// shorttime : value => { ... },
|
||||
// year : value => { ... },
|
||||
// month : value => { ... },
|
||||
// day : value => { ... },
|
||||
// weekdayValue : value => { ... },
|
||||
// weekday : value => { ... },
|
||||
// shortWeekday : value => { ... },
|
||||
// monthName : value => { ... },
|
||||
// shorMonthName : value => { ... },
|
||||
// --- 时间 ------
|
||||
// hour : value => { ... },
|
||||
// hour12 : value => { ... },
|
||||
// minute : value => { ... },
|
||||
// second : value => { ... },
|
||||
// millisecond : value => { ... },
|
||||
// timestamp : value => { ... },
|
||||
// currency : value => { ... },
|
||||
// number : value => { ... },
|
||||
// import { Formatter,FlexFormatter } from "./runtime"
|
||||
export default {
|
||||
// 直接对内置格式化器进行配置,请参阅官网文档
|
||||
// $config:{
|
||||
// datetime : {
|
||||
// units : ["Year","Quarter","Month","Week","Day","Hour","Minute","Second","Millisecond","Microsecond"],
|
||||
// date :{
|
||||
// long : 'YYYY/MM/DD HH:mm:ss',
|
||||
// short : "YYYY/MM/DD",
|
||||
// format : "local"
|
||||
// },
|
||||
// quarter : {
|
||||
// long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
|
||||
// short : ["Q1","Q2","Q3","Q4"],
|
||||
// format : "short"
|
||||
// },
|
||||
// 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 : "long" // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// weekday:{
|
||||
// long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||
// short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
|
||||
// format : "long", // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// time : {
|
||||
// long : "HH:mm:ss",
|
||||
// short : "HH:mm:ss",
|
||||
// format : 'local'
|
||||
// },
|
||||
// timeSlots : {
|
||||
// slots : [12],
|
||||
// lowerCases : ["am","pm"],
|
||||
// upperCases : ["AM","PM"]
|
||||
// },
|
||||
// relativeTime : {
|
||||
// units : ["seconds","minutes","hours","days","weeks","months","years"],
|
||||
// now : "Now",
|
||||
// before : "{value} {unit} ago",
|
||||
// after : "after {value} {unit}"
|
||||
// }
|
||||
// },
|
||||
// currency : {
|
||||
// default : "{symbol}{value}{unit}",
|
||||
// long : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// short : "{symbol}{value}{unit}",
|
||||
// custom : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// format : "default",
|
||||
// //--
|
||||
// units : [""," thousands"," millions"," billions"," trillions"], //千,百万,十亿,万亿
|
||||
// radix : 3, // 进制,即三位一进,中文是4位一进
|
||||
// symbol : "$", // 符号
|
||||
// prefix : "USD", // 前缀
|
||||
// suffix : "", // 后缀
|
||||
// division : 3, // ,分割位
|
||||
// precision : 2, // 精度
|
||||
|
||||
// },
|
||||
// number : {
|
||||
// division : 3, // , 分割位,3代表每3位添加一个,
|
||||
// precision : 0 // 精度,即保留小数点位置,0代表不限
|
||||
// },
|
||||
// empty:{
|
||||
// //values : [], // 可选,定义空值,如果想让0,''也为空值,可以指定values=[0,'']
|
||||
// escape : "", // 当空值时显示的备用值
|
||||
// next : 'break' // 当空值时下一步的行为: break=中止;skip=跳过
|
||||
// },
|
||||
// error : {
|
||||
// //当错误时显示的内容,支持的插值变量有message=错误信息,error=错误类名,也可以是一个返回上面内容的同步函数
|
||||
// escape : null, // 默认当错误时显示空内容
|
||||
// next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
// },
|
||||
// fileSize:{
|
||||
// brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
// whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
// precision: 2 // 小数精度
|
||||
// }
|
||||
// },
|
||||
// 改变特定数据类型的默认格式化器
|
||||
// $types:{
|
||||
// Date : dateFormatter,
|
||||
// Null : value =>"",
|
||||
// Undefined: value =>"",
|
||||
// Error : value => "ERROR",
|
||||
// Boolean : value =>value ? "True":"False",
|
||||
// Number : numberFormartter
|
||||
// }
|
||||
// 以下可以自定义编写格式化器
|
||||
// xxxx : value => { ... },
|
||||
// xxxx : (value,$config) => { ... },
|
||||
// xxxx : (value,...args,$config) => { ... },
|
||||
// xxxx : Formatter(value,...args,$config) => { ... },
|
||||
// xxxx : FlexFormatter(value,params,$config) => { ... },
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
"支持的语言\t: {}": 1,
|
||||
"默认语言\t: {}": 2,
|
||||
"激活语言\t: {}": 3,
|
||||
|
@ -1,11 +1,14 @@
|
||||
|
||||
const messageIds = require("./idMap")
|
||||
const { translate,i18nScope } = require("./runtime.js")
|
||||
const defaultFormatters = require("./formatters/zh.js")
|
||||
const activeFormatters = defaultFormatters
|
||||
import messageIds from "./idMap.js" // 语言ID映射文件
|
||||
import runtime from "./runtime.js" // 运行时
|
||||
const { translate,i18nScope } = runtime
|
||||
import globalFormatters from "./formatters/global.js" // 注册到全局的格式化器
|
||||
import defaultFormatters from "./formatters/zh.js" // 默认语言格式化器
|
||||
const activeFormatters = defaultFormatters // 激活语言格式化器
|
||||
|
||||
const defaultMessages = require("./zh.js") // 默认语言包
|
||||
const activeMessages = defaultMessages
|
||||
import defaultMessages from "./zh.js"
|
||||
const activeMessages = defaultMessages
|
||||
|
||||
|
||||
// 语言配置文件
|
||||
const scopeSettings = {
|
||||
@ -27,8 +30,8 @@ const scopeSettings = {
|
||||
"activeLanguage": "zh",
|
||||
"namespaces": {}
|
||||
}
|
||||
// 格式化器
|
||||
const formatters = {
|
||||
"*" : globalFormatters,
|
||||
'zh' : defaultFormatters,
|
||||
'en' : ()=>import("./formatters/en.js"),
|
||||
'de' : ()=>import("./formatters/de.js")
|
||||
@ -53,6 +56,8 @@ const scope = new i18nScope({
|
||||
// 翻译函数
|
||||
const scopedTtranslate = translate.bind(scope)
|
||||
|
||||
module.exports.t = scopedTtranslate
|
||||
module.exports.i18nScope = scope
|
||||
export {
|
||||
scopedTtranslate as t,
|
||||
scope as i18nScope
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* 判断是否是JSON对象
|
||||
* @param {*} obj
|
||||
@ -1661,8 +1659,8 @@ var en = {
|
||||
next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
},
|
||||
fileSize:{
|
||||
brief: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
whole:["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
precision: 2 // 小数精度
|
||||
}
|
||||
},
|
||||
@ -1967,8 +1965,6 @@ const empty = Formatter$1(function(value,escapeValue,next,$config){
|
||||
{ value | error('ERROR:{ error}',) } == 显示error.constructor.name
|
||||
|
||||
|
||||
|
||||
|
||||
* @param {*} value
|
||||
* @param {*} escapeValue
|
||||
* @param {*} next 下一步的行为,取值,break,ignore
|
||||
@ -2175,11 +2171,7 @@ var scope = class i18nScope {
|
||||
if (!isFunction$2(formatter) || typeof name !== "string") {
|
||||
throw new TypeError("Formatter must be a function");
|
||||
}
|
||||
language = Array.isArray(language)
|
||||
? language
|
||||
: language
|
||||
? language.split(",")
|
||||
: [];
|
||||
language = Array.isArray(language) ? language: language ? language.split(","): [];
|
||||
if (asGlobal) {
|
||||
this.global.registerFormatter(name, formatter, { language });
|
||||
} else {
|
||||
@ -2742,5 +2734,5 @@ var runtime ={
|
||||
getDataTypeName
|
||||
};
|
||||
|
||||
module.exports = runtime;
|
||||
//# sourceMappingURL=runtime.cjs.map
|
||||
export { runtime as default };
|
||||
//# sourceMappingURL=runtime.mjs.map
|
||||
|
@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
"1": "支持的语言\t: {}",
|
||||
"2": "默认语言\t: {}",
|
||||
"3": "激活语言\t: {}",
|
||||
|
@ -2,6 +2,7 @@
|
||||
import messageIds from "./idMap.js" // 语言ID映射文件
|
||||
{{if inlineRuntime }}import runtime from "./runtime.js" // 运行时
|
||||
const { translate,i18nScope } = runtime
|
||||
import globalFormatters from "./formatters/global.js" // 注册到全局的格式化器
|
||||
import defaultFormatters from "./formatters/{{defaultLanguage}}.js" // 默认语言格式化器
|
||||
{{if defaultLanguage === activeLanguage}}const activeFormatters = defaultFormatters{{else}}import activeFormatters from "./formatters/{{activeLanguage}}.js"{{/if}} // 激活语言格式化器
|
||||
{{else}}import { translate,i18nScope } from "@voerkai18n/runtime"
|
||||
@ -12,6 +13,7 @@ import defaultMessages from "./{{defaultLanguage}}.js"
|
||||
{{else}}
|
||||
const messageIds = require("./idMap")
|
||||
{{if inlineRuntime }}const { translate,i18nScope } = require("./runtime.js")
|
||||
const globalFormatters = require("./formatters/global.js") // 注册到全局的格式化器
|
||||
const defaultFormatters = require("./formatters/{{defaultLanguage}}.js")
|
||||
{{if defaultLanguage === activeLanguage}}const activeFormatters = defaultFormatters{{else}}const activeFormatters = require("./formatters/{{activeLanguage}}.js"){{/if}}
|
||||
{{else}}const { translate,i18nScope } = require("@voerkai18n/runtime")
|
||||
@ -23,8 +25,8 @@ const defaultMessages = require("./{{defaultLanguage}}.js") // 默认语
|
||||
|
||||
// 语言配置文件
|
||||
const scopeSettings = {{@ settings}}
|
||||
// 格式化器
|
||||
const formatters = {
|
||||
"*" : globalFormatters,
|
||||
{{each languages}}{{if $value.name == defaultLanguage}}'{{defaultLanguage}}' : defaultFormatters{{if $index !== languages.length - 1}},{{/if}}
|
||||
{{else if $value.name == activeLanguage}}{{if defaultLanguage !== activeLanguage}}'{{activeLanguage}}':activeFormatters{{/if}}{{if $index !== languages.length - 1}},{{/if}}
|
||||
{{else}}'{{$value.name}}' : ()=>import("./formatters/{{$value.name}}.js"){{if $index !== languages.length - 1}},{{'\n\t'}}{{/if}}{{/if}}{{/each}}
|
||||
|
@ -1,70 +1,107 @@
|
||||
/**
|
||||
|
||||
{{comments}}
|
||||
|
||||
格式化器用来对翻译文本内容中的插值变量进行处理
|
||||
|
||||
比如将一个数字格式化为货币格式,或者将一个日期格式化为友好的日期格式。
|
||||
如何编写格式器请参阅官网!
|
||||
|
||||
- 以下定义了一些格式化器,在中文场景下,会启用这些格式化器。
|
||||
import dayjs from "dayjs";
|
||||
export default {
|
||||
$config:{...},
|
||||
$types:{
|
||||
Date:(value)=>dayjs(value).format("YYYY年MM月DD日 HH:mm:ss"),
|
||||
},
|
||||
date:(value)=>dayjs(value).format("YYYY年MM月DD日")
|
||||
bjTime:(value)=>"北京时间"+ value,
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
[格式化器名称]:(value)=>{...},
|
||||
}
|
||||
}
|
||||
- 在翻译函数中使用格式化器的方法,示例如下:
|
||||
|
||||
t("Now is { value | date | bjTime }",{value: new Date()})
|
||||
其等效于:
|
||||
t(`Now is ${bjTime(date(value))",{value: new Date()})
|
||||
由于value分别经过两个管道符转换,上一个管道符的输出作为下一个管道符的输入,可以多次使用管道符。
|
||||
最终的输出结果:
|
||||
中文: "现在是北京时间2022年3月1日"
|
||||
英文: "Now is BeiJing 2022/03/01"
|
||||
*/
|
||||
|
||||
{{if moduleType === "esm"}}
|
||||
export default{{else}}module.exports = {{/if}} {
|
||||
// 格式化器参数
|
||||
$config:{
|
||||
|
||||
},
|
||||
// 指定数据类型的默认格式化器
|
||||
$types:{
|
||||
// "*" : { },
|
||||
// Date : { },
|
||||
// Number: { },
|
||||
// String: { },
|
||||
// Array : { },
|
||||
// Object: { }
|
||||
}
|
||||
// 允许重载内置的格式化器
|
||||
// --- 日期 ------
|
||||
// date : value => { ... },
|
||||
// shortdate : value => { ... },
|
||||
// time : value => { ... },
|
||||
// shorttime : value => { ... },
|
||||
// year : value => { ... },
|
||||
// month : value => { ... },
|
||||
// day : value => { ... },
|
||||
// weekdayValue : value => { ... },
|
||||
// weekday : value => { ... },
|
||||
// shortWeekday : value => { ... },
|
||||
// monthName : value => { ... },
|
||||
// shorMonthName : value => { ... },
|
||||
// --- 时间 ------
|
||||
// hour : value => { ... },
|
||||
// hour12 : value => { ... },
|
||||
// minute : value => { ... },
|
||||
// second : value => { ... },
|
||||
// millisecond : value => { ... },
|
||||
// timestamp : value => { ... },
|
||||
// currency : value => { ... },
|
||||
// number : value => { ... },
|
||||
// import { Formatter,FlexFormatter } from "./runtime"
|
||||
export default{{else}}//const { Formatter,FlexFormatter } = require("./runtime")
|
||||
module.exports = {{/if}} {
|
||||
// 直接对内置格式化器进行配置,请参阅官网文档
|
||||
// $config:{
|
||||
// datetime : {
|
||||
// units : ["Year","Quarter","Month","Week","Day","Hour","Minute","Second","Millisecond","Microsecond"],
|
||||
// date :{
|
||||
// long : 'YYYY/MM/DD HH:mm:ss',
|
||||
// short : "YYYY/MM/DD",
|
||||
// format : "local"
|
||||
// },
|
||||
// quarter : {
|
||||
// long : ["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"],
|
||||
// short : ["Q1","Q2","Q3","Q4"],
|
||||
// format : "short"
|
||||
// },
|
||||
// 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 : "long" // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// weekday:{
|
||||
// long : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||
// short : ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"],
|
||||
// format : "long", // 0-长名称,1-短名称,2-数字
|
||||
// },
|
||||
// time : {
|
||||
// long : "HH:mm:ss",
|
||||
// short : "HH:mm:ss",
|
||||
// format : 'local'
|
||||
// },
|
||||
// timeSlots : {
|
||||
// slots : [12],
|
||||
// lowerCases : ["am","pm"],
|
||||
// upperCases : ["AM","PM"]
|
||||
// },
|
||||
// relativeTime : {
|
||||
// units : ["seconds","minutes","hours","days","weeks","months","years"],
|
||||
// now : "Now",
|
||||
// before : "{value} {unit} ago",
|
||||
// after : "after {value} {unit}"
|
||||
// }
|
||||
// },
|
||||
// currency : {
|
||||
// default : "{symbol}{value}{unit}",
|
||||
// long : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// short : "{symbol}{value}{unit}",
|
||||
// custom : "{prefix} {symbol}{value}{unit}{suffix}",
|
||||
// format : "default",
|
||||
// //--
|
||||
// units : [""," thousands"," millions"," billions"," trillions"], //千,百万,十亿,万亿
|
||||
// radix : 3, // 进制,即三位一进,中文是4位一进
|
||||
// symbol : "$", // 符号
|
||||
// prefix : "USD", // 前缀
|
||||
// suffix : "", // 后缀
|
||||
// division : 3, // ,分割位
|
||||
// precision : 2, // 精度
|
||||
|
||||
// },
|
||||
// number : {
|
||||
// division : 3, // , 分割位,3代表每3位添加一个,
|
||||
// precision : 0 // 精度,即保留小数点位置,0代表不限
|
||||
// },
|
||||
// empty:{
|
||||
// //values : [], // 可选,定义空值,如果想让0,''也为空值,可以指定values=[0,'']
|
||||
// escape : "", // 当空值时显示的备用值
|
||||
// next : 'break' // 当空值时下一步的行为: break=中止;skip=跳过
|
||||
// },
|
||||
// error : {
|
||||
// //当错误时显示的内容,支持的插值变量有message=错误信息,error=错误类名,也可以是一个返回上面内容的同步函数
|
||||
// escape : null, // 默认当错误时显示空内容
|
||||
// next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
// },
|
||||
// fileSize:{
|
||||
// brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
// whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
// precision: 2 // 小数精度
|
||||
// }
|
||||
// },
|
||||
// 改变特定数据类型的默认格式化器
|
||||
// $types:{
|
||||
// Date : dateFormatter,
|
||||
// Null : value =>"",
|
||||
// Undefined: value =>"",
|
||||
// Error : value => "ERROR",
|
||||
// Boolean : value =>value ? "True":"False",
|
||||
// Number : numberFormartter
|
||||
// }
|
||||
// 以下可以自定义编写格式化器
|
||||
// xxxx : value => { ... },
|
||||
// xxxx : (value,$config) => { ... },
|
||||
// xxxx : (value,...args,$config) => { ... },
|
||||
// xxxx : Formatter(value,...args,$config) => { ... },
|
||||
// xxxx : FlexFormatter(value,params,$config) => { ... },
|
||||
}
|
||||
|
@ -66,8 +66,6 @@ const empty = Formatter(function(value,escapeValue,next,$config){
|
||||
{ value | error('ERROR:{ error}',) } == 显示error.constructor.name
|
||||
|
||||
|
||||
|
||||
|
||||
* @param {*} value
|
||||
* @param {*} escapeValue
|
||||
* @param {*} next 下一步的行为,取值,break,ignore
|
||||
|
@ -143,8 +143,8 @@ module.exports = {
|
||||
next : 'break' // 当出错时下一步的行为: break=中止;skip=忽略
|
||||
},
|
||||
fileSize:{
|
||||
brief: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
whole:["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
brief : ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB","NB","DB"],
|
||||
whole : ["Bytes", "Kilobytes", "Megabytes", "Gigabytes", "TeraBytes", "PetaBytes", "ExaBytes", "ZetaBytes", "YottaBytes","DoggaBytes"],
|
||||
precision: 2 // 小数精度
|
||||
}
|
||||
},
|
||||
|
@ -80,11 +80,7 @@ module.exports = class i18nScope {
|
||||
if (!isFunction(formatter) || typeof name !== "string") {
|
||||
throw new TypeError("Formatter must be a function");
|
||||
}
|
||||
language = Array.isArray(language)
|
||||
? language
|
||||
: language
|
||||
? language.split(",")
|
||||
: [];
|
||||
language = Array.isArray(language) ? language: language ? language.split(","): [];
|
||||
if (asGlobal) {
|
||||
this.global.registerFormatter(name, formatter, { language });
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user