From 5bc00d6e377775240c0b34c4e3cd88d549549685 Mon Sep 17 00:00:00 2001 From: wxzhang Date: Thu, 12 Jan 2023 11:25:19 +0800 Subject: [PATCH] update init-command --- package.json | 22 ++-- packages/apps/lib1/index.js | 1 + packages/apps/lib1/languages/en.js | 3 + packages/apps/lib1/languages/formatters/en.js | 113 ++++++++++++++++++ packages/apps/lib1/languages/formatters/zh.js | 113 ++++++++++++++++++ packages/apps/lib1/languages/idMap.js | 8 +- packages/apps/lib1/languages/index.js | 54 +++++++++ packages/apps/lib1/languages/settings.json | 15 +++ .../lib1/languages/translates/default.json | 8 ++ packages/apps/lib1/languages/zh.js | 3 + packages/apps/lib1/package.json | 18 +++ packages/apps/lib1/pnpm-lock.yaml | 0 packages/cli/compile.command.js | 2 +- packages/cli/index.js | 4 +- packages/cli/init.command.js | 29 ++++- packages/cli/package.json | 5 +- packages/cli/templates/init-entry.js | 35 ++++++ packages/cli/templates/init-entry.ts | 26 ++++ packages/cli/translate.command.js | 2 - packages/runtime/package.json | 4 +- packages/utils/index.js | 2 +- pnpm-lock.yaml | 48 ++++---- 22 files changed, 454 insertions(+), 61 deletions(-) create mode 100644 packages/apps/lib1/index.js create mode 100644 packages/apps/lib1/languages/en.js create mode 100644 packages/apps/lib1/languages/formatters/en.js create mode 100644 packages/apps/lib1/languages/formatters/zh.js create mode 100644 packages/apps/lib1/languages/index.js create mode 100644 packages/apps/lib1/languages/settings.json create mode 100644 packages/apps/lib1/languages/translates/default.json create mode 100644 packages/apps/lib1/languages/zh.js create mode 100644 packages/apps/lib1/package.json create mode 100644 packages/apps/lib1/pnpm-lock.yaml create mode 100644 packages/cli/templates/init-entry.js create mode 100644 packages/cli/templates/init-entry.ts diff --git a/package.json b/package.json index dfd8c17..52e3e80 100644 --- a/package.json +++ b/package.json @@ -14,28 +14,28 @@ "author": "", "license": "ISC", "devDependencies": { - "@babel/core": "^7.17.8", - "@babel/plugin-transform-runtime": "^7.17.0", - "@babel/preset-env": "^7.16.11", + "@babel/core": "^7.18.10", + "@babel/plugin-transform-runtime": "^7.18.10", + "@babel/preset-env": "^7.18.10", "@rollup/plugin-babel": "^5.3.1", - "@rollup/plugin-commonjs": "^21.0.2", - "@vuepress/client": "^2.0.0-beta.49", + "@rollup/plugin-commonjs": "^21.1.0", + "@vuepress/client": "2.0.0-beta.49", "autopub": "^1.0.2", - "commander": "^9.0.0", + "commander": "^9.4.0", "cross-env": "^7.0.3", - "dayjs": "^1.11.0", + "dayjs": "^1.11.4", "deepmerge": "^4.2.2", "dumi": "^1.1.47", "enquirer": "^2.3.6", "fast-glob": "^3.2.11", "fs-extra": "^10.1.0", "gulp": "^4.0.2", - "inquirer": "^8.2.2", + "inquirer": "^8.2.4", "jest": "^27.5.1", "logsets": "^1.0.20", - "pnpm": "^7.8.0", - "prettier": "^2.2.1", - "rollup": "^2.70.1", + "pnpm": "^7.9.0", + "prettier": "^2.7.1", + "rollup": "^2.77.2", "rollup-plugin-clear": "^2.0.7", "semver": "^7.3.7", "shelljs": "^0.8.5", diff --git a/packages/apps/lib1/index.js b/packages/apps/lib1/index.js new file mode 100644 index 0000000..63e2ace --- /dev/null +++ b/packages/apps/lib1/index.js @@ -0,0 +1 @@ +console.log(t("这是一个测试")) \ No newline at end of file diff --git a/packages/apps/lib1/languages/en.js b/packages/apps/lib1/languages/en.js new file mode 100644 index 0000000..0563b3c --- /dev/null +++ b/packages/apps/lib1/languages/en.js @@ -0,0 +1,3 @@ +export default { + "1": "这是一个测试" +} \ No newline at end of file diff --git a/packages/apps/lib1/languages/formatters/en.js b/packages/apps/lib1/languages/formatters/en.js new file mode 100644 index 0000000..9f8963d --- /dev/null +++ b/packages/apps/lib1/languages/formatters/en.js @@ -0,0 +1,113 @@ +/** + + 格式化器用来对翻译文本内容中的插值变量进行处理 + + 如何编写格式器请参阅官网! + + */ + + +// 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/lib1/languages/formatters/zh.js b/packages/apps/lib1/languages/formatters/zh.js new file mode 100644 index 0000000..9f8963d --- /dev/null +++ b/packages/apps/lib1/languages/formatters/zh.js @@ -0,0 +1,113 @@ +/** + + 格式化器用来对翻译文本内容中的插值变量进行处理 + + 如何编写格式器请参阅官网! + + */ + + +// 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/lib1/languages/idMap.js b/packages/apps/lib1/languages/idMap.js index 5adaca2..ef9777b 100644 --- a/packages/apps/lib1/languages/idMap.js +++ b/packages/apps/lib1/languages/idMap.js @@ -1,7 +1,3 @@ export default { - "a":1, - "b":2, - "c{}{}":3, - "d{a}{b}":4, - "e":5 -} \ No newline at end of file + "这是一个测试": 1 +} \ No newline at end of file diff --git a/packages/apps/lib1/languages/index.js b/packages/apps/lib1/languages/index.js new file mode 100644 index 0000000..6382dd1 --- /dev/null +++ b/packages/apps/lib1/languages/index.js @@ -0,0 +1,54 @@ + +import messageIds from "./idMap.js" // 语言ID映射文件 +import runtime from "@voerkai18n/runtime" +const { translate,VoerkaI18nScope } = runtime +import defaultFormatters from "./formatters/zh" +const activeFormatters = defaultFormatters +import defaultMessages from "./zh.js" +const activeMessages = defaultMessages + + +// 语言配置文件 +const scopeSettings = { + "languages": [ + { + "name": "zh", + "title": "中文" + }, + { + "name": "en", + "title": "英语" + } + ], + "defaultLanguage": "zh", + "activeLanguage": "zh", + "namespaces": {} +} +const formatters = { + 'zh' : defaultFormatters, + 'en' : ()=>import("./formatters/en.js") +} +// 语言包加载器 +const loaders = { + "en" : ()=>import("./en.js") +} + +// 语言作用域 +const scope = new VoerkaI18nScope({ + ...scopeSettings, // languages,defaultLanguage,activeLanguage,namespaces,formatters + id : "lib1", // 当前作用域的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 +} + diff --git a/packages/apps/lib1/languages/settings.json b/packages/apps/lib1/languages/settings.json new file mode 100644 index 0000000..96083d3 --- /dev/null +++ b/packages/apps/lib1/languages/settings.json @@ -0,0 +1,15 @@ +{ + "languages": [ + { + "name": "zh", + "title": "中文" + }, + { + "name": "en", + "title": "英语" + } + ], + "defaultLanguage": "zh", + "activeLanguage": "zh", + "namespaces": {} +} \ No newline at end of file diff --git a/packages/apps/lib1/languages/translates/default.json b/packages/apps/lib1/languages/translates/default.json new file mode 100644 index 0000000..116c0d7 --- /dev/null +++ b/packages/apps/lib1/languages/translates/default.json @@ -0,0 +1,8 @@ +{ + "这是一个测试": { + "en": "这是一个测试", + "$file": [ + "index.js" + ] + } +} \ No newline at end of file diff --git a/packages/apps/lib1/languages/zh.js b/packages/apps/lib1/languages/zh.js new file mode 100644 index 0000000..0563b3c --- /dev/null +++ b/packages/apps/lib1/languages/zh.js @@ -0,0 +1,3 @@ +export default { + "1": "这是一个测试" +} \ No newline at end of file diff --git a/packages/apps/lib1/package.json b/packages/apps/lib1/package.json new file mode 100644 index 0000000..3200a24 --- /dev/null +++ b/packages/apps/lib1/package.json @@ -0,0 +1,18 @@ +{ + "name": "lib1", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@voerkai18n/cli": "workspace:^1.0.41" + }, + "dependencies": { + "@voerkai18n/runtime": "workspace:^1.1.10" + } +} diff --git a/packages/apps/lib1/pnpm-lock.yaml b/packages/apps/lib1/pnpm-lock.yaml new file mode 100644 index 0000000..e69de29 diff --git a/packages/cli/compile.command.js b/packages/cli/compile.command.js index 9a67b7b..c19bedc 100644 --- a/packages/cli/compile.command.js +++ b/packages/cli/compile.command.js @@ -25,7 +25,7 @@ const glob = require("glob") const createLogger = require("logsets") const path = require("path") -const { findModuleType,getCurrentPackageJson,installVoerkai18nRuntime,isInstallDependent,updateVoerkai18nRuntime} = require("@voerkai18n/utils") +const { findModuleType,getCurrentPackageJson} = require("@voerkai18n/utils") const { t } = require("./i18nProxy") const fs = require("fs-extra") const logger = createLogger() diff --git a/packages/cli/index.js b/packages/cli/index.js index f9664fe..4e417cf 100644 --- a/packages/cli/index.js +++ b/packages/cli/index.js @@ -1,6 +1,5 @@ const { Command } = require('commander'); const createLogger = require("logsets") -const bannerPluin = require("logsets/plugins/banner") const path = require("path") const fs = require("fs-extra") @@ -8,7 +7,6 @@ const logger = createLogger() const { i18nScope ,t } = require("./i18nProxy") const { getProjectSourceFolder,isTypeScriptProject } = require("@voerkai18n/utils"); -logger.use(bannerPluin) const program = new Command(); program @@ -30,6 +28,7 @@ program .argument('[location]', t('工程项目所在目录')) .description(t('初始化项目国际化配置')) .option('-D, --debug', t('输出调试信息')) + .option('-m, --moduleType [types]', t('输出模块类型,取值auto,esm,cjs'), 'esm') .option('-r, --reset', t('重新生成当前项目的语言配置')) .option('-lngs, --languages ', t('支持的语言列表'), ['zh','en']) .option('-d, --defaultLanguage ', t('默认语言'), 'zh') @@ -39,6 +38,7 @@ program await i18nScope.change(lang) }) .action((location,options) => { + options.isTypeScript = options.typescript==undefined ? isTypeScriptProject() : options.typescript location = getProjectSourceFolder(location) logger.log(t("工程目录:{}"),location) // diff --git a/packages/cli/init.command.js b/packages/cli/init.command.js index 7c3acdd..f9d98d6 100644 --- a/packages/cli/init.command.js +++ b/packages/cli/init.command.js @@ -10,6 +10,7 @@ const { t } = require("./i18nProxy") const createLogger = require("logsets") const logger = createLogger() const { installPackage } = require("@voerkai18n/utils") +const artTemplate = require("art-template") function getLanguageList(langs,defaultLanguage){ try{ @@ -38,16 +39,17 @@ function getLanguageList(langs,defaultLanguage){ } -module.exports = function(srcPath,{debug = true,languages=["zh","en"],defaultLanguage="zh",activeLanguage="zh",reset=false,installRuntime=true}={}){ - +module.exports = function(srcPath,{moduleType='cjs',isTypeScript,debug = true,languages=["zh","en"],defaultLanguage="zh",activeLanguage="zh",reset=false}={}){ + let settings = {} let tasks = logger.tasklist("初始化VoerkaI18n工程") + const langFolderName = "languages" + // 查找当前项目的语言包类型路径 + const lngPath = path.join(srcPath,langFolderName) // 语言文件夹名称 try{ tasks.add("创建语言包文件夹") - const langPath = "languages" - // 查找当前项目的语言包类型路径 - const lngPath = path.join(srcPath,langPath) + if(!fs.existsSync(lngPath)){ fs.mkdirSync(lngPath) if(debug) logger.log(t("创建语言包文件夹: {}"),lngPath) @@ -63,9 +65,10 @@ module.exports = function(srcPath,{debug = true,languages=["zh","en"],defaultLan const settingsFile = path.join(lngPath,"settings.json") if(fs.existsSync(settingsFile) && !reset){ if(debug) logger.log(t("语言配置文件{}文件已存在,跳过创建。\n使用{}可以重新覆盖创建"),settingsFile,"-r") + tasks.skip() return } - const settings = { + settings = { languages:getLanguageList(languages,defaultLanguage), defaultLanguage, activeLanguage, @@ -78,12 +81,26 @@ module.exports = function(srcPath,{debug = true,languages=["zh","en"],defaultLan tasks.error(e.message) } + // 生成一个语言初始化文件,该文件在执行extract/compile前提供访问t函数的能力 + try{ + tasks.add("初始化语言上下文") + const templateContext = { + moduleType + } + const entryContent = artTemplate(path.join(__dirname,"templates",`init-entry.${isTypeScript ? 'ts' : 'js'}`), templateContext ) + fs.writeFileSync(path.join(lngPath,`index.${isTypeScript ? 'ts' : 'js'}`),entryContent) + tasks.complete() + }catch(e){ + tasks.error(e.message) + } + try{ tasks.add(t("安装运行时依赖@voerkai18n/runtime")) installPackage('@voerkai18n/runtime') tasks.complete() }catch(e){ tasks.error(e.message) + console.error(e.stack) } if(debug) { diff --git a/packages/cli/package.json b/packages/cli/package.json index d35dc20..490a275 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -40,15 +40,12 @@ "fs-extra": "^10.0.1", "glob": "^7.2.0", "gulp": "^4.0.2", - "logsets": "^1.0.8", + "logsets": "^1.0.20", "md5": "^2.3.0", "qs": "^6.10.3", "shelljs": "^0.8.5", "through2": "^4.0.2", "vinyl": "^2.2.1" }, - "devDependencies": { - "@voerkai18n/autopublish": "workspace:^1.0.2" - }, "lastPublish": "2023-01-11T21:51:34+08:00" } \ No newline at end of file diff --git a/packages/cli/templates/init-entry.js b/packages/cli/templates/init-entry.js new file mode 100644 index 0000000..e0dcaaa --- /dev/null +++ b/packages/cli/templates/init-entry.js @@ -0,0 +1,35 @@ +/** + * 初始化入口 + * + * 本文件仅供在执行voerkai18n extract&compile前提供t函数引用 + * + */ +{{if moduleType === "esm"}} +import runtime from "@voerkai18n/runtime" +const { translate,VoerkaI18nScope } = runtime +{{else}} +const { translate,i18nScope } = require("@voerkai18n/runtime") +{{/if}} + + +// 语言作用域 +const scope = new VoerkaI18nScope({ + id : "{{scopeId}}", // 当前作用域的id,自动取当前工程的package.json的name + debug : false, // 是否在控制台输出高度信息 + default : {}, // 默认语言包 + messages : {}, // 当前语言包 + idMap : {}, // 消息id映射列表 + formatters, // 扩展自定义格式化器 + loaders : {} // 语言包加载器 +}) +// 翻译函数 +const scopedTtranslate = translate.bind(scope) +{{if moduleType === "esm"}} +export { + scopedTtranslate as t, + scope as i18nScope +} +{{else}} +module.exports.t = scopedTtranslate +module.exports.i18nScope = scope +{{/if}} diff --git a/packages/cli/templates/init-entry.ts b/packages/cli/templates/init-entry.ts new file mode 100644 index 0000000..df91257 --- /dev/null +++ b/packages/cli/templates/init-entry.ts @@ -0,0 +1,26 @@ +/** + * 初始化入口 + * + * 本文件仅供在执行voerkai18n extract&compile前提供t函数引用 + * + */ +import runtime from "@voerkai18n/runtime" +const { translate,VoerkaI18nScope } = runtime + + +// 语言作用域 +const scope = new VoerkaI18nScope({ + id : "{{scopeId}}", // 当前作用域的id,自动取当前工程的package.json的name + debug : false, // 是否在控制台输出高度信息 + default : {}, // 默认语言包 + messages : {}, // 当前语言包 + idMap : {}, // 消息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/cli/translate.command.js b/packages/cli/translate.command.js index a563fdc..42077eb 100644 --- a/packages/cli/translate.command.js +++ b/packages/cli/translate.command.js @@ -30,9 +30,7 @@ const fs = require("fs-extra") const { glob } = require("glob") const { default: axios } = require("axios") const logger = createLogger() -const TaskListPlugin = require("logsets/plugins/tasklist") const { deepMerge } = require("@voerkai18n/utils") -logger.use(TaskListPlugin) const delay = async (t) => new Promise(resolve=>setTimeout(resolve,t)) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 7f03bea..5041a89 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@voerkai18n/runtime", - "version": "1.1.10", + "version": "1.1.11", "description": "核心运行时", "main": "./dist/index.cjs", "module": "./dist/index.esm.js", @@ -41,4 +41,4 @@ "rollup-plugin-terser": "^7.0.2" }, "lastPublish": "2023-01-11T21:50:59+08:00" -} \ No newline at end of file +} diff --git a/packages/utils/index.js b/packages/utils/index.js index eef8d2d..4210d63 100644 --- a/packages/utils/index.js +++ b/packages/utils/index.js @@ -409,7 +409,7 @@ function deepMerge(toObj,formObj,options={}){ } function getPackageTool(){ - const projectFolder = getProjectRootFolder(srcPath || process.cwd()) + const projectFolder = getProjectRootFolder(process.cwd()) if(fs.existsSync(path.join(projectFolder,"pnpm-lock.yaml"))){ return 'pnpm' }else if(fs.existsSync(path.join(projectFolder,"yarn.lock"))){ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b3c7d1..a0cb68e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,28 +4,28 @@ importers: .: specifiers: - '@babel/core': ^7.17.8 - '@babel/plugin-transform-runtime': ^7.17.0 - '@babel/preset-env': ^7.16.11 + '@babel/core': ^7.18.10 + '@babel/plugin-transform-runtime': ^7.18.10 + '@babel/preset-env': ^7.18.10 '@rollup/plugin-babel': ^5.3.1 - '@rollup/plugin-commonjs': ^21.0.2 - '@vuepress/client': ^2.0.0-beta.49 + '@rollup/plugin-commonjs': ^21.1.0 + '@vuepress/client': 2.0.0-beta.49 autopub: ^1.0.2 - commander: ^9.0.0 + commander: ^9.4.0 cross-env: ^7.0.3 - dayjs: ^1.11.0 + dayjs: ^1.11.4 deepmerge: ^4.2.2 dumi: ^1.1.47 enquirer: ^2.3.6 fast-glob: ^3.2.11 fs-extra: ^10.1.0 gulp: ^4.0.2 - inquirer: ^8.2.2 + inquirer: ^8.2.4 jest: ^27.5.1 logsets: ^1.0.20 - pnpm: ^7.8.0 - prettier: ^2.2.1 - rollup: ^2.70.1 + pnpm: ^7.9.0 + prettier: ^2.7.1 + rollup: ^2.77.2 rollup-plugin-clear: ^2.0.7 semver: ^7.3.7 shelljs: ^0.8.5 @@ -70,6 +70,15 @@ importers: '@voerkai18n/cli': link:../../cli '@voerkai18n/runtime': link:../../runtime + packages/apps/lib1: + specifiers: + '@voerkai18n/cli': workspace:^1.0.41 + '@voerkai18n/runtime': workspace:^1.1.10 + dependencies: + '@voerkai18n/runtime': link:../../runtime + devDependencies: + '@voerkai18n/cli': link:../../cli + packages/apps/reactapp: specifiers: '@babel/runtime-corejs3': ^7.20.7 @@ -157,7 +166,6 @@ importers: specifiers: '@babel/cli': ^7.17.6 '@babel/core': ^7.17.5 - '@voerkai18n/autopublish': workspace:^1.0.2 '@voerkai18n/runtime': workspace:^1.0.14 '@voerkai18n/utils': workspace:^1.0.6 art-template: ^4.13.2 @@ -168,7 +176,7 @@ importers: fs-extra: ^10.0.1 glob: ^7.2.0 gulp: ^4.0.2 - logsets: ^1.0.8 + logsets: ^1.0.20 md5: ^2.3.0 qs: ^6.10.3 shelljs: ^0.8.5 @@ -187,14 +195,12 @@ importers: fs-extra: 10.1.0 glob: 7.2.3 gulp: 4.0.2 - logsets: 1.0.12 + logsets: 1.0.20 md5: 2.3.0 qs: 6.11.0 shelljs: 0.8.5 through2: 4.0.2 vinyl: 2.2.1 - devDependencies: - '@voerkai18n/autopublish': link:../autopublish packages/formatters: specifiers: @@ -7786,15 +7792,6 @@ packages: is-unicode-supported: 0.1.0 dev: true - /logsets/1.0.12: - resolution: {integrity: sha512-0sIHPbyhHDKZll7j6XnTq91pe8QTBshapB2BDVD6lOqKuyitukK2Grt7iEbUF432kaBt+xDvYiU3DadaUyowog==} - dependencies: - '@babel/runtime-corejs3': 7.18.9 - ansicolor: 1.1.100 - core-js: 3.24.1 - deepmerge: 4.2.2 - dev: false - /logsets/1.0.20: resolution: {integrity: sha512-2ch4+TSciSTFAkkIv9tL7xOMe0Tg+XYsR//EAcMW2227bWjscReAoz2GLkjIMJMACHVZIyXmKrohtiV9z6M1iQ==} dependencies: @@ -7802,7 +7799,6 @@ packages: ansicolor: 1.1.100 core-js: 3.24.1 deepmerge: 4.2.2 - dev: true /longest-streak/2.0.4: resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==}