test: 增加apps/nodejs demo

This commit is contained in:
wxzhang 2023-03-29 17:32:27 +08:00
parent 95cf29aae9
commit fae66ba0a6
12 changed files with 691 additions and 0 deletions

View File

@ -0,0 +1,8 @@
const { t,i18nScope } = require("./languages");
cn_messages = t("一{}")+t("二")+t("三")+t("四")+t("五")
console.log(t("这是一个测试:{a}+{b | x}={c}",{a:1,b:2,c:3}))
console.log("END")

View File

@ -0,0 +1,32 @@
module.exports = {
"1": "Hello world!",
"2": "中华人民共和国",
"3": "迎接中华民族的伟大复兴",
"4": "成立于{}年",
"5": "首都:北京",
"6": "VoerkaI18n多语言解决方案 ",
"7": "现在是{ value | date }",
"8": "现在是{ value | shortdate }",
"9": "现在是{ value | time }",
"10": "现在是{ value | shorttime }",
"11": "现在是{ value | year }",
"12": "现在是{ value | month }",
"13": "现在是{ value | day }",
"14": "现在是{ value | weekdayValue }",
"15": "现在是{ value | weekday }",
"16": "现在是{ value | shortWeekday }",
"17": "现在是{ value | monthName }",
"18": "现在是{ value | shorMonthName }",
"19": "现在是{ value | hour }",
"20": "现在是{ value | hour12 }",
"21": "现在是{ value | minute }",
"22": "现在是{ value | second }",
"23": "现在是{ value | millisecond }",
"24": "现在是{ value | timestamp }",
"25": "商品价格:{ value | currency }",
"26": "商品价格:{ value | capitalizeCurrency }",
"27": "现在是{ value }",
"28": "商品价格:{ value | currency('CNY','元整',3)}",
"29": "商品价格:{ value | capitalizeCurrency(true) }",
"30": "商品数量:{ value | number }"
}

View File

@ -0,0 +1,34 @@
module.exports = {
"1": "VoerkaI18n多语言解决方案 ",
"2": "EN Hello world!",
"3": "The People's Republic of China",
"4": "Welcome the great rejuvenation of the Chinese nation",
"5": "Founded in {}",
"6": "Capital: Beijing",
"7": "Price{ value | currency }",
"8": "Price{ value | capitalizeCurrency }",
"9": "Price{ value | capitalizeCurrency(true) }",
"10": "Count{ value | number }",
"11": "Now is { value }",
"12": "Now is { value | date }",
"13": "Now is { value | date | empty }",
"14": "Now is { value | date | empty('无') }",
"15": "Now is { value | shortdate }",
"16": "Now is { value | time }",
"17": "Now is { value | shorttime }",
"18": "Now is { value | year }",
"19": "Now is { value | month }",
"20": "Now is { value | day }",
"21": "Now is { value | weekdayValue }",
"22": "Now is { value | weekday }",
"23": "Now is { value | shortWeekday }",
"24": "Now is { value | monthName }",
"25": "Now is { value | shorMonthName }",
"26": "Now is { value | hour }",
"27": "Now is { value | hour12 }",
"28": "Now is { value | minute }",
"29": "Now is { value | second }",
"30": "Now is { value | millisecond }",
"31": "Now is { value | timestamp }",
"32": "Price{ value | currency('CNY','元整',3)}"
}

View File

@ -0,0 +1,66 @@
/**
格式化器用来对翻译文本内容中的插值变量进行处理
比如将一个数字格式化为货币格式或者将一个日期格式化为友好的日期格式
- 以下定义了一些格式化器在中文场景下会启用这些格式化器
import dayjs from "dayjs";
export default {
$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 = {
// 格式化器参数
$settings:{ },
// 指定数据类型的默认格式化器
$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 => { ... },
}

View File

@ -0,0 +1,86 @@
/**
格式化器用来对翻译文本内容中的插值变量进行格式化
比如将一个数字格式化为货币格式或者将一个日期格式化为友好的日期格式
- 以下定义了一些格式化器在中文场景下会启用这些格式化器
import dayjs from "dayjs";
const formatters = {
"*":{ // 在所有语言下生效的格式化器
$types:{...}, // 只作用于特定数据类型的默认格式化器
.... // 全局格式化器
},
zh:{
// 只作用于特定数据类型的格式化器
$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"
*
*/
module.exports = {
$settings:{
},
// 所有类型的默认格式化器
$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 => { ... },
}

View File

@ -0,0 +1,86 @@
/**
格式化器用来对翻译文本内容中的插值变量进行格式化
比如将一个数字格式化为货币格式或者将一个日期格式化为友好的日期格式
- 以下定义了一些格式化器在中文场景下会启用这些格式化器
import dayjs from "dayjs";
const formatters = {
"*":{ // 在所有语言下生效的格式化器
$types:{...}, // 只作用于特定数据类型的默认格式化器
.... // 全局格式化器
},
zh:{
// 只作用于特定数据类型的格式化器
$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"
*
*/
module.exports ={
$settings:{
},
// 所有类型的默认格式化器
$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 => { ... },
}

View File

@ -0,0 +1,34 @@
module.exports = {
"VoerkaI18n多语言解决方案 ": 1,
"Hello world!": 2,
"中华人民共和国": 3,
"迎接中华民族的伟大复兴": 4,
"成立于{}年": 5,
"首都:北京": 6,
"商品价格:{ value | currency }": 7,
"商品价格:{ value | capitalizeCurrency }": 8,
"商品价格:{ value | capitalizeCurrency(true) }": 9,
"商品数量:{ value | number }": 10,
"现在是{ value }": 11,
"现在是{ value | date }": 12,
"现在是{ value | date | empty }": 13,
"现在是{ value | date | empty('无') }": 14,
"现在是{ value | shortdate }": 15,
"现在是{ value | time }": 16,
"现在是{ value | shorttime }": 17,
"现在是{ value | year }": 18,
"现在是{ value | month }": 19,
"现在是{ value | day }": 20,
"现在是{ value | weekdayValue }": 21,
"现在是{ value | weekday }": 22,
"现在是{ value | shortWeekday }": 23,
"现在是{ value | monthName }": 24,
"现在是{ value | shorMonthName }": 25,
"现在是{ value | hour }": 26,
"现在是{ value | hour12 }": 27,
"现在是{ value | minute }": 28,
"现在是{ value | second }": 29,
"现在是{ value | millisecond }": 30,
"现在是{ value | timestamp }": 31,
"商品价格:{ value | currency('CNY','元整',3)}": 32
}

View File

@ -0,0 +1,60 @@
const messageIds =require("./idMap.js") // 语言ID映射文件
const runtime = require("../../../runtime/index.js");
const { translate,VoerkaI18nScope } = runtime
const defaultFormatters =require("./formatters/zh")
const activeFormatters = defaultFormatters
const defaultMessages =require("./zh.js")
const activeMessages = defaultMessages
// 语言配置文件
const scopeSettings = {
"languages": [
{
"name": "zh",
"title": "中文"
},
{
"name": "en",
"title": "英文"
},
{
"name": "de",
"title": "德语"
}
],
"defaultLanguage": "zh",
"activeLanguage": "zh",
"namespaces": {}
}
const formatters = {
'zh' : defaultFormatters,
'en' : require("./formatters/en.js"),
'de' : require("./formatters/de.js")
}
// 语言包加载器
const loaders = {
"en" : ()=>import("./en.js"),
"de" : ()=>import("./de.js")
}
// 语言作用域
const scope = new VoerkaI18nScope({
...scopeSettings, // languages,defaultLanguage,activeLanguage,namespaces,formatters
id : "vueapp", // 当前作用域的id自动取当前工程的package.json的name
debug : false, // 是否在控制台输出高度信息
default : defaultMessages, // 默认语言包
messages : activeMessages, // 当前语言包
idMap : messageIds, // 消息id映射列表
formatters, // 扩展自定义格式化器
loaders // 语言包加载器
})
// 翻译函数
const scopedTtranslate = translate.bind(scope)
module.exports = {
t:scopedTtranslate ,
i18nScope:scope
}

View File

@ -0,0 +1,19 @@
{
"languages": [
{
"name": "zh",
"title": "中文"
},
{
"name": "en",
"title": "英文"
},
{
"name": "de",
"title": "德语"
}
],
"defaultLanguage": "zh",
"activeLanguage": "zh",
"namespaces": {}
}

View File

@ -0,0 +1,227 @@
{
"VoerkaI18n多语言解决方案 ": {
"en": "VoerkaI18n多语言解决方案 ",
"de": "VoerkaI18n multilingual solution ",
"$file": [
"App.vue"
]
},
"Hello world!": {
"en": "EN Hello world!",
"de": "DE Hello world!",
"$file": [
"App.vue",
"components\\formatters.vue"
]
},
"中华人民共和国": {
"en": "The People's Republic of China",
"de": "中华人民共和国",
"$file": [
"App.vue"
]
},
"迎接中华民族的伟大复兴": {
"en": "Welcome the great rejuvenation of the Chinese nation",
"de": "迎接中华民族的伟大复兴",
"$file": [
"App.vue"
]
},
"成立于{}年": {
"en": "Founded in {}",
"de": "成立于{}年",
"$file": [
"components\\china.vue"
]
},
"首都:北京": {
"en": "Capital: Beijing",
"de": "首都:北京",
"$file": [
"components\\china.vue"
]
},
"商品价格:{ value | currency }": {
"en": "Price{ value | currency }",
"de": "DE Price{ value | currency }",
"$file": [
"components\\formatters.vue"
]
},
"商品价格:{ value | capitalizeCurrency }": {
"en": "Price{ value | capitalizeCurrency }",
"de": "商品价格:{ value | capitalizeCurrency }",
"$file": [
"components\\formatters.vue"
]
},
"商品价格:{ value | capitalizeCurrency(true) }": {
"en": "Price{ value | capitalizeCurrency(true) }",
"de": "商品价格:{ value | capitalizeCurrency(true) }",
"$file": [
"components\\formatters.vue"
]
},
"商品数量:{ value | number }": {
"en": "Count{ value | number }",
"de": "商品数量:{ value | number }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value }": {
"en": "Now is { value }",
"de": "D现在是{ value }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | date }": {
"en": "Now is { value | date }",
"de": "D现在是{ value | date }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | date | empty }": {
"en": "Now is { value | date | empty }",
"de": "D现在是{ value | date | empty }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | date | empty('无') }": {
"en": "Now is { value | date | empty('无') }",
"de": "D现在是{ value | date | empty('无') }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | shortdate }": {
"en": "Now is { value | shortdate }",
"de": "D现在是{ value | shortdate }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | time }": {
"en": "Now is { value | time }",
"de": "D现在是{ value | time }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | shorttime }": {
"en": "Now is { value | shorttime }",
"de": "D现在是{ value | shorttime }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | year }": {
"en": "Now is { value | year }",
"de": "D现在是{ value | year }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | month }": {
"en": "Now is { value | month }",
"de": "D现在是{ value | month }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | day }": {
"en": "Now is { value | day }",
"de": "D现在是{ value | day }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | weekdayValue }": {
"en": "Now is { value | weekdayValue }",
"de": "D现在是{ value | weekdayValue }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | weekday }": {
"en": "Now is { value | weekday }",
"de": "D现在是{ value | weekday }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | shortWeekday }": {
"en": "Now is { value | shortWeekday }",
"de": "D现在是{ value | shortWeekday }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | monthName }": {
"en": "Now is { value | monthName }",
"de": "D现在是{ value | monthName }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | shorMonthName }": {
"en": "Now is { value | shorMonthName }",
"de": "D现在是{ value | shorMonthName }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | hour }": {
"en": "Now is { value | hour }",
"de": "D现在是{ value | hour }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | hour12 }": {
"en": "Now is { value | hour12 }",
"de": "D现在是{ value | hour12 }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | minute }": {
"en": "Now is { value | minute }",
"de": "D现在是{ value | minute }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | second }": {
"en": "Now is { value | second }",
"de": "D现在是{ value | second }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | millisecond }": {
"en": "Now is { value | millisecond }",
"de": "D现在是{ value | millisecond }",
"$file": [
"components\\formatters.vue"
]
},
"现在是{ value | timestamp }": {
"en": "Now is { value | timestamp }",
"de": "D现在是{ value | timestamp }",
"$file": [
"components\\formatters.vue"
]
},
"商品价格:{ value | currency('CNY','元整',3)}": {
"en": "Price{ value | currency('CNY','元整',3)}",
"de": "D商品价格{ value | currency('CNY','元整',3)}",
"$file": [
"components\\formatters.vue"
]
}
}

View File

@ -0,0 +1,32 @@
module.exports = {
"1": "Hello world!",
"2": "中华人民共和国",
"3": "迎接中华民族的伟大复兴",
"4": "成立于{}年",
"5": "首都:北京",
"6": "VoerkaI18n多语言解决方案 ",
"7": "现在是{ value | date }",
"8": "现在是{ value | shortdate }",
"9": "现在是{ value | time }",
"10": "现在是{ value | shorttime }",
"11": "现在是{ value | year }",
"12": "现在是{ value | month }",
"13": "现在是{ value | day }",
"14": "现在是{ value | weekdayValue }",
"15": "现在是{ value | weekday }",
"16": "现在是{ value | shortWeekday }",
"17": "现在是{ value | monthName }",
"18": "现在是{ value | shorMonthName }",
"19": "现在是{ value | hour }",
"20": "现在是{ value | hour12 }",
"21": "现在是{ value | minute }",
"22": "现在是{ value | second }",
"23": "现在是{ value | millisecond }",
"24": "现在是{ value | timestamp }",
"25": "商品价格:{ value | currency }",
"26": "商品价格:{ value | capitalizeCurrency }",
"27": "现在是{ value }",
"28": "商品价格:{ value | currency('CNY','元整',3)}",
"29": "商品价格:{ value | capitalizeCurrency(true) }",
"30": "商品数量:{ value | number }"
}

View File

@ -0,0 +1,7 @@
{
"name": "@voerkai18n/testapp",
"main": "./index.js",
"scripts": {
"release": "pnpm autopublish"
}
}