From dfc334435912e597182ed9d2dfd0cacf2fbfbd4a Mon Sep 17 00:00:00 2001 From: wxzhang Date: Fri, 20 Jan 2023 22:00:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84@voerkai18n/vue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/apps/vue-ts-app/.gitignore | 24 + .../apps/vue-ts-app/.vscode/extensions.json | 3 + packages/apps/vue-ts-app/README.md | 18 + packages/apps/vue-ts-app/index.html | 13 + packages/apps/vue-ts-app/package.json | 24 + packages/apps/vue-ts-app/public/vite.svg | 1 + packages/apps/vue-ts-app/src/App.vue | 136 ++++ packages/apps/vue-ts-app/src/assets/vue.svg | 1 + .../apps/vue-ts-app/src/components/china.vue | 29 + .../vue-ts-app/src/components/formatters.vue | 79 ++ packages/apps/vue-ts-app/src/languages/en.ts | 34 + .../vue-ts-app/src/languages/formatters/en.ts | 112 +++ .../vue-ts-app/src/languages/formatters/zh.ts | 112 +++ .../apps/vue-ts-app/src/languages/idMap.ts | 34 + .../apps/vue-ts-app/src/languages/index.ts | 50 ++ .../vue-ts-app/src/languages/settings.json | 15 + .../src/languages/translates/default.json | 227 ++++++ packages/apps/vue-ts-app/src/languages/zh.js | 34 + packages/apps/vue-ts-app/src/languages/zh.ts | 34 + packages/apps/vue-ts-app/src/main.ts | 11 + packages/apps/vue-ts-app/src/style.css | 81 ++ packages/apps/vue-ts-app/src/vite-env.d.ts | 1 + packages/apps/vue-ts-app/tsconfig.json | 18 + packages/apps/vue-ts-app/tsconfig.node.json | 9 + packages/apps/vue-ts-app/vite.config.ts | 14 + packages/apps/vueapp/package.json | 5 +- .../vueapp/public/languages/vueapp/en.json | 2 +- packages/apps/vueapp/src/App.vue | 20 +- .../apps/vueapp/src/components/formatters.vue | 6 +- packages/apps/vueapp/src/languages/en.js | 63 +- packages/apps/vueapp/src/languages/idMap.js | 63 +- packages/apps/vueapp/src/languages/index.js | 12 +- .../src/languages/translates/default.json | 348 ++++----- packages/apps/vueapp/src/main.js | 4 +- packages/apps/vueapp/vite.config.js | 12 +- packages/formatters/package.json | 6 +- packages/runtime/index.d.ts | 5 +- packages/vite/index.d.ts | 9 + packages/vite/index.js | 10 +- packages/vite/package.json | 6 +- packages/vue/index.d.ts | 32 + packages/vue/index.js | 97 +-- packages/vue/package.json | 9 +- pnpm-lock.yaml | 690 ++++++++++++++++-- tsconfig.json | 1 + 45 files changed, 2126 insertions(+), 388 deletions(-) create mode 100644 packages/apps/vue-ts-app/.gitignore create mode 100644 packages/apps/vue-ts-app/.vscode/extensions.json create mode 100644 packages/apps/vue-ts-app/README.md create mode 100644 packages/apps/vue-ts-app/index.html create mode 100644 packages/apps/vue-ts-app/package.json create mode 100644 packages/apps/vue-ts-app/public/vite.svg create mode 100644 packages/apps/vue-ts-app/src/App.vue create mode 100644 packages/apps/vue-ts-app/src/assets/vue.svg create mode 100644 packages/apps/vue-ts-app/src/components/china.vue create mode 100644 packages/apps/vue-ts-app/src/components/formatters.vue create mode 100644 packages/apps/vue-ts-app/src/languages/en.ts create mode 100644 packages/apps/vue-ts-app/src/languages/formatters/en.ts create mode 100644 packages/apps/vue-ts-app/src/languages/formatters/zh.ts create mode 100644 packages/apps/vue-ts-app/src/languages/idMap.ts create mode 100644 packages/apps/vue-ts-app/src/languages/index.ts create mode 100644 packages/apps/vue-ts-app/src/languages/settings.json create mode 100644 packages/apps/vue-ts-app/src/languages/translates/default.json create mode 100644 packages/apps/vue-ts-app/src/languages/zh.js create mode 100644 packages/apps/vue-ts-app/src/languages/zh.ts create mode 100644 packages/apps/vue-ts-app/src/main.ts create mode 100644 packages/apps/vue-ts-app/src/style.css create mode 100644 packages/apps/vue-ts-app/src/vite-env.d.ts create mode 100644 packages/apps/vue-ts-app/tsconfig.json create mode 100644 packages/apps/vue-ts-app/tsconfig.node.json create mode 100644 packages/apps/vue-ts-app/vite.config.ts create mode 100644 packages/vite/index.d.ts diff --git a/packages/apps/vue-ts-app/.gitignore b/packages/apps/vue-ts-app/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/packages/apps/vue-ts-app/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/apps/vue-ts-app/.vscode/extensions.json b/packages/apps/vue-ts-app/.vscode/extensions.json new file mode 100644 index 0000000..c0a6e5a --- /dev/null +++ b/packages/apps/vue-ts-app/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/packages/apps/vue-ts-app/README.md b/packages/apps/vue-ts-app/README.md new file mode 100644 index 0000000..ef72fd5 --- /dev/null +++ b/packages/apps/vue-ts-app/README.md @@ -0,0 +1,18 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/packages/apps/vue-ts-app/package.json b/packages/apps/vue-ts-app/package.json new file mode 100644 index 0000000..a94cd5a --- /dev/null +++ b/packages/apps/vue-ts-app/package.json @@ -0,0 +1,24 @@ +{ + "name": "vue-ts-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@voerkai18n/runtime": "workspace:^1.1.16", + "@voerkai18n/vue": "workspace:^1.0.12", + "vue": "^3.2.45" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.0.0", + "@voerkai18n/vite": "workspace:^1.0.19", + "typescript": "^4.9.3", + "vite": "^4.0.0", + "vite-plugin-inspect": "^0.7.14", + "vue-tsc": "^1.0.11" + } +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/public/vite.svg b/packages/apps/vue-ts-app/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/apps/vue-ts-app/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/App.vue b/packages/apps/vue-ts-app/src/App.vue new file mode 100644 index 0000000..de65087 --- /dev/null +++ b/packages/apps/vue-ts-app/src/App.vue @@ -0,0 +1,136 @@ + + + + + + + + diff --git a/packages/apps/vue-ts-app/src/assets/vue.svg b/packages/apps/vue-ts-app/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/packages/apps/vue-ts-app/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/components/china.vue b/packages/apps/vue-ts-app/src/components/china.vue new file mode 100644 index 0000000..9924f2f --- /dev/null +++ b/packages/apps/vue-ts-app/src/components/china.vue @@ -0,0 +1,29 @@ + + + + + + diff --git a/packages/apps/vue-ts-app/src/components/formatters.vue b/packages/apps/vue-ts-app/src/components/formatters.vue new file mode 100644 index 0000000..8fe358d --- /dev/null +++ b/packages/apps/vue-ts-app/src/components/formatters.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/packages/apps/vue-ts-app/src/languages/en.ts b/packages/apps/vue-ts-app/src/languages/en.ts new file mode 100644 index 0000000..80565c9 --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/en.ts @@ -0,0 +1,34 @@ +export default { + "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)}" +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/languages/formatters/en.ts b/packages/apps/vue-ts-app/src/languages/formatters/en.ts new file mode 100644 index 0000000..804d61d --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/formatters/en.ts @@ -0,0 +1,112 @@ +/** + + 格式化器用来对翻译文本内容中的插值变量进行处理 + + 如何编写格式器请参阅官网! + + */ + +// import { Formatter,FlexFormatter } from "./runtime" +export default { + // global : true, // 简单地设置为true,代表当前所有格式化器均注册到全局,false只在当前scope生效 + // global : { // 仅将里面的格式化器注册到全局 + // $config:{... } + // xxxx : value => { ... }, + // xxxx : (value,$config) => { ... }, + // xxxx : (value,...args,$config) => { ... }, + // xxxx : Formatter(value,...args,$config) => { ... }, + // xxxx : FlexFormatter(value,params,$config) => { ... }, + //}, // 是否注册到全局,false只在当前scope生效 + // 直接对内置格式化器进行配置,请参阅官网文档 + // $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) => { ... }, +} diff --git a/packages/apps/vue-ts-app/src/languages/formatters/zh.ts b/packages/apps/vue-ts-app/src/languages/formatters/zh.ts new file mode 100644 index 0000000..804d61d --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/formatters/zh.ts @@ -0,0 +1,112 @@ +/** + + 格式化器用来对翻译文本内容中的插值变量进行处理 + + 如何编写格式器请参阅官网! + + */ + +// import { Formatter,FlexFormatter } from "./runtime" +export default { + // global : true, // 简单地设置为true,代表当前所有格式化器均注册到全局,false只在当前scope生效 + // global : { // 仅将里面的格式化器注册到全局 + // $config:{... } + // xxxx : value => { ... }, + // xxxx : (value,$config) => { ... }, + // xxxx : (value,...args,$config) => { ... }, + // xxxx : Formatter(value,...args,$config) => { ... }, + // xxxx : FlexFormatter(value,params,$config) => { ... }, + //}, // 是否注册到全局,false只在当前scope生效 + // 直接对内置格式化器进行配置,请参阅官网文档 + // $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) => { ... }, +} diff --git a/packages/apps/vue-ts-app/src/languages/idMap.ts b/packages/apps/vue-ts-app/src/languages/idMap.ts new file mode 100644 index 0000000..dd13763 --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/idMap.ts @@ -0,0 +1,34 @@ +export default { + "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 +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/languages/index.ts b/packages/apps/vue-ts-app/src/languages/index.ts new file mode 100644 index 0000000..d5e5f2f --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/index.ts @@ -0,0 +1,50 @@ +import messageIds from "./idMap" // 语言ID映射文件 +import runtime from "@voerkai18n/runtime" +const { translate,VoerkaI18nScope } = runtime +import defaultFormatters from "./formatters/zh" // 默认语言格式化器 +const activeFormatters = defaultFormatters +import defaultMessages from "./zh" +const activeMessages = defaultMessages + +// 语言配置文件 +const scopeSettings = { + "languages": [ + { + "name": "zh", + "title": "zh" + }, + { + "name": "en", + "title": "en" + } + ], + "defaultLanguage": "zh", + "activeLanguage": "zh", + "namespaces": {} +} +const formatters = { + 'zh' : defaultFormatters, + 'en' : ()=>import("./formatters/en") +} +// 语言包加载器 +const loaders = { + "en" : ()=>import("./en") +} + +// 语言作用域 +const scope = new VoerkaI18nScope({ + ...scopeSettings, // languages,defaultLanguage,activeLanguage,namespaces,formatters + id : "vue-ts-app", // 当前作用域的id,自动取当前工程的package.json的name + debug : false, // 是否在控制台输出高度信息 + default : defaultMessages, // 默认语言包 + messages : activeMessages, // 当前语言包 + idMap : messageIds, // 消息id映射列表 + formatters, // 扩展自定义格式化器 + loaders // 语言包加载器 +}) +// 翻译函数 +const scopedTtranslate = translate.bind(scope) +export { + scopedTtranslate as t, + scope as i18nScope +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/languages/settings.json b/packages/apps/vue-ts-app/src/languages/settings.json new file mode 100644 index 0000000..9086f99 --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/settings.json @@ -0,0 +1,15 @@ +{ + "languages": [ + { + "name": "zh", + "title": "zh" + }, + { + "name": "en", + "title": "en" + } + ], + "defaultLanguage": "zh", + "activeLanguage": "zh", + "namespaces": {} +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/languages/translates/default.json b/packages/apps/vue-ts-app/src/languages/translates/default.json new file mode 100644 index 0000000..0c00abb --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/translates/default.json @@ -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" + ] + } +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/languages/zh.js b/packages/apps/vue-ts-app/src/languages/zh.js new file mode 100644 index 0000000..e5ead70 --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/zh.js @@ -0,0 +1,34 @@ +export default { + "1": "VoerkaI18n多语言解决方案 ", + "2": "Hello world!", + "3": "中华人民共和国", + "4": "迎接中华民族的伟大复兴", + "5": "成立于{}年", + "6": "首都:北京", + "7": "商品价格:{ value | currency }", + "8": "商品价格:{ value | capitalizeCurrency }", + "9": "商品价格:{ value | capitalizeCurrency(true) }", + "10": "商品数量:{ value | number }", + "11": "现在是{ value }", + "12": "现在是{ value | date }", + "13": "现在是{ value | date | empty }", + "14": "现在是{ value | date | empty('无') }", + "15": "现在是{ value | shortdate }", + "16": "现在是{ value | time }", + "17": "现在是{ value | shorttime }", + "18": "现在是{ value | year }", + "19": "现在是{ value | month }", + "20": "现在是{ value | day }", + "21": "现在是{ value | weekdayValue }", + "22": "现在是{ value | weekday }", + "23": "现在是{ value | shortWeekday }", + "24": "现在是{ value | monthName }", + "25": "现在是{ value | shorMonthName }", + "26": "现在是{ value | hour }", + "27": "现在是{ value | hour12 }", + "28": "现在是{ value | minute }", + "29": "现在是{ value | second }", + "30": "现在是{ value | millisecond }", + "31": "现在是{ value | timestamp }", + "32": "商品价格:{ value | currency('CNY','元整',3)}" +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/languages/zh.ts b/packages/apps/vue-ts-app/src/languages/zh.ts new file mode 100644 index 0000000..e5ead70 --- /dev/null +++ b/packages/apps/vue-ts-app/src/languages/zh.ts @@ -0,0 +1,34 @@ +export default { + "1": "VoerkaI18n多语言解决方案 ", + "2": "Hello world!", + "3": "中华人民共和国", + "4": "迎接中华民族的伟大复兴", + "5": "成立于{}年", + "6": "首都:北京", + "7": "商品价格:{ value | currency }", + "8": "商品价格:{ value | capitalizeCurrency }", + "9": "商品价格:{ value | capitalizeCurrency(true) }", + "10": "商品数量:{ value | number }", + "11": "现在是{ value }", + "12": "现在是{ value | date }", + "13": "现在是{ value | date | empty }", + "14": "现在是{ value | date | empty('无') }", + "15": "现在是{ value | shortdate }", + "16": "现在是{ value | time }", + "17": "现在是{ value | shorttime }", + "18": "现在是{ value | year }", + "19": "现在是{ value | month }", + "20": "现在是{ value | day }", + "21": "现在是{ value | weekdayValue }", + "22": "现在是{ value | weekday }", + "23": "现在是{ value | shortWeekday }", + "24": "现在是{ value | monthName }", + "25": "现在是{ value | shorMonthName }", + "26": "现在是{ value | hour }", + "27": "现在是{ value | hour12 }", + "28": "现在是{ value | minute }", + "29": "现在是{ value | second }", + "30": "现在是{ value | millisecond }", + "31": "现在是{ value | timestamp }", + "32": "商品价格:{ value | currency('CNY','元整',3)}" +} \ No newline at end of file diff --git a/packages/apps/vue-ts-app/src/main.ts b/packages/apps/vue-ts-app/src/main.ts new file mode 100644 index 0000000..6051f37 --- /dev/null +++ b/packages/apps/vue-ts-app/src/main.ts @@ -0,0 +1,11 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' +import i18nPlugin from '@voerkai18n/vue' +import { i18nScope } from './languages' + + + +const app = createApp(App) +app.use(i18nPlugin,{i18nScope}) +app.mount('#app') diff --git a/packages/apps/vue-ts-app/src/style.css b/packages/apps/vue-ts-app/src/style.css new file mode 100644 index 0000000..0192f9a --- /dev/null +++ b/packages/apps/vue-ts-app/src/style.css @@ -0,0 +1,81 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/apps/vue-ts-app/src/vite-env.d.ts b/packages/apps/vue-ts-app/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/packages/apps/vue-ts-app/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/apps/vue-ts-app/tsconfig.json b/packages/apps/vue-ts-app/tsconfig.json new file mode 100644 index 0000000..b557c40 --- /dev/null +++ b/packages/apps/vue-ts-app/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "noEmit": true + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/apps/vue-ts-app/tsconfig.node.json b/packages/apps/vue-ts-app/tsconfig.node.json new file mode 100644 index 0000000..9d31e2a --- /dev/null +++ b/packages/apps/vue-ts-app/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/apps/vue-ts-app/vite.config.ts b/packages/apps/vue-ts-app/vite.config.ts new file mode 100644 index 0000000..7ea3456 --- /dev/null +++ b/packages/apps/vue-ts-app/vite.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import Inspect from 'vite-plugin-inspect' +import Voerkai18nPlugin from "@voerkai18n/vite" +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + Inspect(), // localhost:3000/__inspect/ + Voerkai18nPlugin({ + debug:true, + autoImport:true + }), + vue()], +}) diff --git a/packages/apps/vueapp/package.json b/packages/apps/vueapp/package.json index 5e3deca..5f9957b 100644 --- a/packages/apps/vueapp/package.json +++ b/packages/apps/vueapp/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@voerkai18n/cli": "workspace:^1.0.11", + "@voerkai18n/runtime": "workspace:^1.1.16", "@voerkai18n/vite": "workspace:^1.0.7", "@voerkai18n/vue": "workspace:^1.0.0", "vue": "^3.2.37" @@ -27,7 +28,7 @@ "@voerkai18n/babel": "workspace:^1.0.0", "babel-preset-env": "^1.7.0", "core-js": "^3.21.1", - "vite": "^2.9.14", - "vite-plugin-inspect": "^0.4.3" + "vite": "^4.0.4", + "vite-plugin-inspect": "^0.7.14" } } diff --git a/packages/apps/vueapp/public/languages/vueapp/en.json b/packages/apps/vueapp/public/languages/vueapp/en.json index 9c0e97e..9d66899 100644 --- a/packages/apps/vueapp/public/languages/vueapp/en.json +++ b/packages/apps/vueapp/public/languages/vueapp/en.json @@ -1,3 +1,3 @@ { - "2": "The People's Republic of China!!!" + "2": "Hello world-Patch!" } \ No newline at end of file diff --git a/packages/apps/vueapp/src/App.vue b/packages/apps/vueapp/src/App.vue index 7c9d3f2..854057c 100644 --- a/packages/apps/vueapp/src/App.vue +++ b/packages/apps/vueapp/src/App.vue @@ -1,6 +1,6 @@