{{ title }}
{{ t("成立于{}年",1949)}}
{{ t("首都:北京")}}
diff --git a/packages/apps/vueapp/src/components/formatters.vue b/packages/apps/vueapp/src/components/formatters.vue
index fde90b7..6f6348f 100644
--- a/packages/apps/vueapp/src/components/formatters.vue
+++ b/packages/apps/vueapp/src/components/formatters.vue
@@ -12,14 +12,16 @@ export default {
components: { China },
data() {
return {
- NOW: null//new Date()
+ NOW: new Date(),
+ datetime:null
}
}
}
-
+
+ {{t("Hello world!")}}
@@ -28,9 +30,17 @@ export default {
+
+
+ |
日期 |
- 默认 | {{ t("现在是{ value }", NOW) }} |
- date | {{ t("现在是{ value | date }", NOW) }} |
+
+
currency | {{ t("商品价格:{ value | currency }", 788741) }} |
capitalizeCurrency | {{ t("商品价格:{ value | capitalizeCurrency }", 788741) }} |
capitalizeCurrency | {{ t("商品价格:{ value | capitalizeCurrency(true) }", 788741.35) }} |
diff --git a/packages/apps/vueapp/src/languages/en.js b/packages/apps/vueapp/src/languages/en.js
index 5f91453..fab93c3 100644
--- a/packages/apps/vueapp/src/languages/en.js
+++ b/packages/apps/vueapp/src/languages/en.js
@@ -1,32 +1,33 @@
export default {
- "1": "Hello world!",
+ "1": "Hello world!(EN)",
"2": "The People's Republic of China",
"3": "Welcome the great rejuvenation of the Chinese nation",
"4": "Founded in {}",
"5": "Capital: Beijing",
"6": "VoerkaI18n多语言解决方案 ",
"7": "Now is { value | date }",
- "8": "Now is { value | shortdate }",
- "9": "Now is { value | time }",
- "10": "Now is { value | shorttime }",
- "11": "Now is { value | year }",
- "12": "Now is { value | month }",
- "13": "Now is { value | day }",
- "14": "Now is { value | weekdayValue }",
- "15": "Now is { value | weekday }",
- "16": "Now is { value | shortWeekday }",
- "17": "Now is { value | monthName }",
- "18": "Now is { value | shorMonthName }",
- "19": "Now is { value | hour }",
- "20": "Now is { value | hour12 }",
- "21": "Now is { value | minute }",
- "22": "Now is { value | second }",
- "23": "Now is { value | millisecond }",
- "24": "Now is { value | timestamp }",
- "25": "Price: { value | currency }",
- "26": "Price: { value | capitalizeCurrency }",
- "27": "Now is { value }",
- "28": "Price: { value | currency('CNY','元整',3)}",
- "29": "Price:{ value | capitalizeCurrency(true) }",
- "30": "Count: { value | number }"
+ "8": "Now is { value | date | empty }",
+ "9": "Now is { value | date | empty('无') }",
+ "10": "现在是{ value | shortdate }",
+ "11": "现在是{ value | time }",
+ "12": "现在是{ value | shorttime }",
+ "13": "现在是{ value | year }",
+ "14": "现在是{ value | month }",
+ "15": "现在是{ value | day }",
+ "16": "现在是{ value | weekdayValue }",
+ "17": "现在是{ value | weekday }",
+ "18": "现在是{ value | shortWeekday }",
+ "19": "现在是{ value | monthName }",
+ "20": "现在是{ value | shorMonthName }",
+ "21": "现在是{ value | hour }",
+ "22": "现在是{ value | hour12 }",
+ "23": "现在是{ value | minute }",
+ "24": "现在是{ value | second }",
+ "25": "现在是{ value | millisecond }",
+ "26": "现在是{ value | timestamp }",
+ "27": "商品价格:{ value | currency('US ','元整',3)}",
+ "28": "商品价格:{ value | currency }",
+ "29": "商品价格:{ value | capitalizeCurrency }",
+ "30": "商品价格:{ value | capitalizeCurrency(true) }",
+ "31": "商品数量:{ value | number }"
}
\ No newline at end of file
diff --git a/packages/apps/vueapp/src/languages/formatters.js b/packages/apps/vueapp/src/languages/formatters.js
deleted file mode 100644
index 08d1d72..0000000
--- a/packages/apps/vueapp/src/languages/formatters.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
-
- 格式化器用来对翻译文本内容中的插值变量进行格式化,
- 比如将一个数字格式化为货币格式,或者将一个日期格式化为友好的日期格式。
-
- - 以下定义了一些格式化器,在中文场景下,会启用这些格式化器。
- import dayjs from "dayjs";
- const formatters = {
- "*":{ // 在所有语言下生效的格式化器
- $types:{...}, // 只作用于特定数据类型的默认格式化器
- .... // 全局格式化器
- },
- cn:{
- // 只作用于特定数据类型的格式化器
- $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)=>{...},
- },
- en:{
- $types:{
- Date:(value)=>dayjs(value).format("YYYY/MM/DD HH:mm:ss"), // 默认的格式化器
- },
- date:(value)=>dayjs(value).format("YYYY/MM/DD")
- bjTime:(value)=>"BeiJing "+ 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"
-
- *
- */
-
-
-
-
-export default{
- // 在所有语言下生效的格式化器
- "*":{
- //[格式化名称]:(value)=>{...},
- //[格式化名称]:(value,arg)=>{...},
- },
- // 在所有语言下只作用于特定数据类型的格式化器
- $types:{
-
- },
- zh:{
- $types:{
- // 所有类型的默认格式化器
- // "*":{
-
- // },
- // Date:{
-
- // },
- // Number:{
-
- // },
- // String:{
-
- // },
- // Array:{
-
- // },
- // Object:{
-
- // }
- }
- },
- en:{
- $types:{
- // 所有类型的默认格式化器
- // "*":{
-
- // },
- // Date:{
-
- // },
- // Number:{
-
- // },
- // String:{
-
- // },
- // Array:{
-
- // },
- // Object:{
-
- // }
- }
- }
-}
\ No newline at end of file
diff --git a/packages/apps/vueapp/src/languages/idMap.js b/packages/apps/vueapp/src/languages/idMap.js
index a0384d5..dd92c21 100644
--- a/packages/apps/vueapp/src/languages/idMap.js
+++ b/packages/apps/vueapp/src/languages/idMap.js
@@ -6,27 +6,28 @@ export default {
"首都:北京": 5,
"VoerkaI18n多语言解决方案 ": 6,
"现在是{ value | date }": 7,
- "现在是{ value | shortdate }": 8,
- "现在是{ value | time }": 9,
- "现在是{ value | shorttime }": 10,
- "现在是{ value | year }": 11,
- "现在是{ value | month }": 12,
- "现在是{ value | day }": 13,
- "现在是{ value | weekdayValue }": 14,
- "现在是{ value | weekday }": 15,
- "现在是{ value | shortWeekday }": 16,
- "现在是{ value | monthName }": 17,
- "现在是{ value | shorMonthName }": 18,
- "现在是{ value | hour }": 19,
- "现在是{ value | hour12 }": 20,
- "现在是{ value | minute }": 21,
- "现在是{ value | second }": 22,
- "现在是{ value | millisecond }": 23,
- "现在是{ value | timestamp }": 24,
- "商品价格:{ value | currency }": 25,
- "商品价格:{ value | capitalizeCurrency }": 26,
- "现在是{ value }": 27,
- "商品价格:{ value | currency('CNY','元整',3)}": 28,
- "商品价格:{ value | capitalizeCurrency(true) }": 29,
- "商品数量:{ value | number }": 30
+ "现在是{ value | date | empty }": 8,
+ "现在是{ value | date | empty('无') }": 9,
+ "现在是{ value | shortdate }": 10,
+ "现在是{ value | time }": 11,
+ "现在是{ value | shorttime }": 12,
+ "现在是{ value | year }": 13,
+ "现在是{ value | month }": 14,
+ "现在是{ value | day }": 15,
+ "现在是{ value | weekdayValue }": 16,
+ "现在是{ value | weekday }": 17,
+ "现在是{ value | shortWeekday }": 18,
+ "现在是{ value | monthName }": 19,
+ "现在是{ value | shorMonthName }": 20,
+ "现在是{ value | hour }": 21,
+ "现在是{ value | hour12 }": 22,
+ "现在是{ value | minute }": 23,
+ "现在是{ value | second }": 24,
+ "现在是{ value | millisecond }": 25,
+ "现在是{ value | timestamp }": 26,
+ "商品价格:{ value | currency('CNY','元整',3)}": 27,
+ "商品价格:{ value | currency }": 28,
+ "商品价格:{ value | capitalizeCurrency }": 29,
+ "商品价格:{ value | capitalizeCurrency(true) }": 30,
+ "商品数量:{ value | number }": 31
}
\ No newline at end of file
diff --git a/packages/apps/vueapp/src/languages/index.js b/packages/apps/vueapp/src/languages/index.js
index 4ee9f2f..22223a9 100644
--- a/packages/apps/vueapp/src/languages/index.js
+++ b/packages/apps/vueapp/src/languages/index.js
@@ -1,6 +1,7 @@
import messageIds from "./idMap.js" // 语言ID映射文件
-import { translate,i18nScope } from "./runtime.js" // 运行时
+import runtime from "./runtime.js" // 运行时
+const { translate,i18nScope } = runtime
import defaultFormatters from "./formatters/zh.js" // 默认语言格式化器
const activeFormatters = defaultFormatters // 激活语言格式化器
@@ -44,6 +45,7 @@ const loaders = {
const scope = new i18nScope({
...scopeSettings, // languages,defaultLanguage,activeLanguage,namespaces,formatters
id : "vueapp", // 当前作用域的id,自动取当前工程的package.json的name
+ debug : false, // 是否在控制台输出高度信息
default : defaultMessages, // 默认语言包
messages : activeMessages, // 当前语言包
idMap : messageIds, // 消息id映射列表
diff --git a/packages/apps/vueapp/src/languages/translates/default.json b/packages/apps/vueapp/src/languages/translates/default.json
index 79e2340..679c239 100644
--- a/packages/apps/vueapp/src/languages/translates/default.json
+++ b/packages/apps/vueapp/src/languages/translates/default.json
@@ -1,212 +1,219 @@
{
"Hello world!": {
- "en": "Hello world!",
+ "en": "Hello world!(EN)",
"$file": [
"App.vue"
],
- "de": "Hello world!"
+ "de": "Hello world!(DE)"
},
"中华人民共和国": {
"en": "The People's Republic of China",
"$file": [
"App.vue"
],
- "de": "中华人民共和国"
+ "de": "中华人民共和国(DE)"
},
"迎接中华民族的伟大复兴": {
"en": "Welcome the great rejuvenation of the Chinese nation",
"$file": [
"App.vue"
],
- "de": "迎接中华民族的伟大复兴"
+ "de": "迎接中华民族的伟大复兴(DE)"
},
"成立于{}年": {
"en": "Founded in {}",
"$file": [
"components\\china.vue"
],
- "de": "成立于{}年"
+ "de": "成立于{}年(DE)"
},
"首都:北京": {
"en": "Capital: Beijing",
"$file": [
"components\\china.vue"
],
- "de": "首都:北京"
+ "de": "首都:北京(DE)"
},
"VoerkaI18n多语言解决方案 ": {
"en": "VoerkaI18n多语言解决方案 ",
"$file": [
"App.vue"
],
- "de": "VoerkaI18n多语言解决方案 "
+ "de": "VoerkaI18n多语言解决方案 (DE)"
},
"现在是{ value | date }": {
"en": "Now is { value | date }",
"$file": [
"components\\formatters.vue"
],
- "de": "现在是{ value | date }"
+ "de": "DE Now is { value | date }(DE)"
+ },
+ "现在是{ value | date | empty }": {
+ "en": "Now is { value | date | empty }",
+ "de": "Now is { value | date | empty }(DE)",
+ "$file": [
+ "components\\formatters.vue"
+ ]
+ },
+ "现在是{ value | date | empty('无') }": {
+ "en": "Now is { value | date | empty('无') }",
+ "de": "Now is { value | date | empty('无') } (DE) ",
+ "$file": [
+ "components\\formatters.vue"
+ ]
},
"现在是{ value | shortdate }": {
- "en": "Now is { value | shortdate }",
+ "en": "现在是{ value | shortdate }",
+ "de": "现在是{ value | shortdate }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | shortdate }"
+ ]
},
"现在是{ value | time }": {
- "en": "Now is { value | time }",
+ "en": "现在是{ value | time }",
+ "de": "现在是{ value | time }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | time }"
+ ]
},
"现在是{ value | shorttime }": {
- "en": "Now is { value | shorttime }",
+ "en": "现在是{ value | shorttime }",
+ "de": "现在是{ value | shorttime }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | shorttime }"
+ ]
},
"现在是{ value | year }": {
- "en": "Now is { value | year }",
+ "en": "现在是{ value | year }",
+ "de": "现在是{ value | year }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | year }"
+ ]
},
"现在是{ value | month }": {
- "en": "Now is { value | month }",
+ "en": "现在是{ value | month }",
+ "de": "现在是{ value | month }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | month }"
+ ]
},
"现在是{ value | day }": {
- "en": "Now is { value | day }",
+ "en": "现在是{ value | day }",
+ "de": "现在是{ value | day }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | day }"
+ ]
},
"现在是{ value | weekdayValue }": {
- "en": "Now is { value | weekdayValue }",
+ "en": "现在是{ value | weekdayValue }",
+ "de": "现在是{ value | weekdayValue }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | weekdayValue }"
+ ]
},
"现在是{ value | weekday }": {
- "en": "Now is { value | weekday }",
+ "en": "现在是{ value | weekday }",
+ "de": "现在是{ value | weekday }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | weekday }"
+ ]
},
"现在是{ value | shortWeekday }": {
- "en": "Now is { value | shortWeekday }",
+ "en": "现在是{ value | shortWeekday }",
+ "de": "现在是{ value | shortWeekday }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | shortWeekday }"
+ ]
},
"现在是{ value | monthName }": {
- "en": "Now is { value | monthName }",
+ "en": "现在是{ value | monthName }",
+ "de": "现在是{ value | monthName }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | monthName }"
+ ]
},
"现在是{ value | shorMonthName }": {
- "en": "Now is { value | shorMonthName }",
+ "en": "现在是{ value | shorMonthName }",
+ "de": "现在是{ value | shorMonthName }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | shorMonthName }"
+ ]
},
"现在是{ value | hour }": {
- "en": "Now is { value | hour }",
+ "en": "现在是{ value | hour }",
+ "de": "现在是{ value | hour }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | hour }"
+ ]
},
"现在是{ value | hour12 }": {
- "en": "Now is { value | hour12 }",
+ "en": "现在是{ value | hour12 }",
+ "de": "现在是{ value | hour12 }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | hour12 }"
+ ]
},
"现在是{ value | minute }": {
- "en": "Now is { value | minute }",
+ "en": "现在是{ value | minute }",
+ "de": "现在是{ value | minute }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | minute }"
+ ]
},
"现在是{ value | second }": {
- "en": "Now is { value | second }",
+ "en": "现在是{ value | second }",
+ "de": "现在是{ value | second }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | second }"
+ ]
},
"现在是{ value | millisecond }": {
- "en": "Now is { value | millisecond }",
+ "en": "现在是{ value | millisecond }",
+ "de": "现在是{ value | millisecond }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | millisecond }"
+ ]
},
"现在是{ value | timestamp }": {
- "en": "Now is { value | timestamp }",
+ "en": "现在是{ value | timestamp }",
+ "de": "现在是{ value | timestamp }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "现在是{ value | timestamp }"
- },
- "商品价格:{ value | currency }": {
- "en": "Price: { value | currency }",
- "$file": [
- "components\\formatters.vue"
- ],
- "de": "商品价格:{ value | currency }"
- },
- "商品价格:{ value | capitalizeCurrency }": {
- "en": "Price: { value | capitalizeCurrency }",
- "$file": [
- "components\\formatters.vue"
- ],
- "de": "商品价格:{ value | capitalizeCurrency }"
- },
- "现在是{ value }": {
- "en": "Now is { value }",
- "$file": [
- "components\\formatters.vue"
- ],
- "de": "现在是{ value }"
+ ]
},
"商品价格:{ value | currency('CNY','元整',3)}": {
- "en": "Price: { value | currency('CNY','元整',3)}",
+ "en": "商品价格:{ value | currency('US ','元整',3)}",
+ "de": "商品价格:{ value | currency('CNY','元整',3)}",
"$file": [
"components\\formatters.vue"
- ],
- "de": "商品价格:{ value | currency('CNY','元整',3)}"
+ ]
+ },
+ "商品价格:{ value | currency }": {
+ "en": "商品价格:{ value | currency }",
+ "de": "商品价格:{ value | currency }",
+ "$file": [
+ "components\\formatters.vue"
+ ]
+ },
+ "商品价格:{ value | capitalizeCurrency }": {
+ "en": "商品价格:{ value | capitalizeCurrency }",
+ "de": "商品价格:{ value | capitalizeCurrency }",
+ "$file": [
+ "components\\formatters.vue"
+ ]
},
"商品价格:{ value | capitalizeCurrency(true) }": {
- "en": "Price:{ value | capitalizeCurrency(true) }",
+ "en": "商品价格:{ value | capitalizeCurrency(true) }",
+ "de": "商品价格:{ value | capitalizeCurrency(true) }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "商品价格:{ value | capitalizeCurrency(true) }"
+ ]
},
"商品数量:{ value | number }": {
- "en": "Count: { value | number }",
+ "en": "商品数量:{ value | number }",
+ "de": "商品数量:{ value | number }",
"$file": [
"components\\formatters.vue"
- ],
- "de": "商品数量:{ value | number }"
+ ]
}
}
\ No newline at end of file
diff --git a/packages/cli/templates/entry.js b/packages/cli/templates/entry.js
index 6a1af6b..d4f1e6e 100644
--- a/packages/cli/templates/entry.js
+++ b/packages/cli/templates/entry.js
@@ -1,6 +1,7 @@
{{if moduleType === "esm"}}
import messageIds from "./idMap.js" // 语言ID映射文件
-{{if inlineRuntime }}import { translate,i18nScope } from "./runtime.js" // 运行时
+{{if inlineRuntime }}import runtime from "./runtime.js" // 运行时
+const { translate,i18nScope } = runtime
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"
diff --git a/packages/cli/templates/formatters.js b/packages/cli/templates/formatters.js
index fa25b4b..71a9a5d 100644
--- a/packages/cli/templates/formatters.js
+++ b/packages/cli/templates/formatters.js
@@ -30,7 +30,7 @@
*/
{{if moduleType === "esm"}}
-export default{{else}}module.exports = {{/if}}{
+export default{{else}}module.exports = {{/if}} {
// 格式化器参数
$config:{
diff --git a/packages/vue/index.js b/packages/vue/index.js
index d8333ed..82a921d 100644
--- a/packages/vue/index.js
+++ b/packages/vue/index.js
@@ -15,11 +15,19 @@ import { computed,reactive,ref } from "vue"
function forceUpdate(app){
function updateComponent(inst){
- if(inst && inst.update) inst.update()
- if(inst.subTree && inst.subTree.children){
- inst.subTree.children.forEach( vnode=>{
- if(vnode && vnode.component) updateComponent(vnode.component)
- })
+ if(!inst) return
+ if(inst.update) inst.update()
+ if(inst.subTree){
+ if(inst.subTree.children){
+ inst.subTree.children.forEach( vnode=>{
+ if(vnode && vnode.component) updateComponent(vnode.component)
+ })
+ }
+ if(inst.subTree.dynamicChildren){
+ inst.subTree.dynamicChildren.forEach( vnode=>{
+ if(vnode && vnode.component) updateComponent(vnode.component)
+ })
+ }
}
}
try{