Skip to content

Commit

Permalink
feat: add --languages-location option for cli
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangfisher committed Jul 25, 2023
1 parent c583345 commit 82e6fe3
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
3 changes: 2 additions & 1 deletion packages/cli/compile.command.js
Original file line number Diff line number Diff line change
Expand Up @@ -248,14 +248,15 @@ program
.option('-u, --update-runtime',t("自动更新runtime"))
.option('-m, --moduleType [types]', t('输出模块类型,取值auto,esm,cjs'), 'esm')
.option('--skip',t("跳过更新language/index.(ts|js)文件"),false)
.option('--languages-location',t("languages文件夹相对位置"),"languages")
.argument('[location]', t('工程项目所在目录'),"./")
.hook("preAction",async function(location){
await i18nScope.change(getCliLanguage())
})
.action(async (location,options) => {
location = getProjectSourceFolder(location)
options.isTypeScript = options.typescript==undefined ? isTypeScriptProject() : options.typescript
const langFolder = path.join(location,"languages")
const langFolder = path.join(location,options.languagesLocation)
if(!fs.existsSync(langFolder)){
logger.error(t("语言包文件夹<{}>不存在",langFolder))
return
Expand Down
14 changes: 8 additions & 6 deletions packages/cli/extract.command.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ const { getCliLanguage } = require("./oslocate")


function extract(srcPath,options={}){
let { filetypes,exclude} = options
let { filetypes,exclude,languagesLocation} = options
if(!filetypes) filetypes = ["*.js","*.jsx","*.ts","*.tsx","*.vue","*.html"]
if(!Array.isArray(filetypes)) filetypes = filetypes.split(",")
const folders = filetypes.map(ftype=>{
if(ftype.startsWith(".")) ftype = "*"+ftype
if(!ftype.startsWith("*.")) ftype = "*."+ftype
return path.join(srcPath,"**",ftype)
})
folders.push(`!${path.join(srcPath,"languages","**")}`)
folders.push(`!${path.join(srcPath,languagesLocation,"**")}`)
folders.push(`!${path.join(srcPath,"node_modules","**")}`)
folders.push(`!${path.join(srcPath,"**","node_modules","**")}`)
folders.push("!**/babel.config.js")
Expand All @@ -47,7 +47,7 @@ function extract(srcPath,options={}){
logger.format(folders)
}

options.outputPath = path.join(srcPath,"languages")
options.outputPath = path.join(srcPath,languagesLocation)
gulp.src(folders)
.pipe(extractor(options))
.pipe(gulp.dest(options.outputPath))
Expand All @@ -65,7 +65,8 @@ program
.option('-ns, --namespaces', t('翻译名称空间'))
.option('-e, --exclude <folders>', t('排除要扫描的文件夹,多个用逗号分隔'))
.option('-u, --updateMode', t('本次提取内容与已存在内容的数据合并策略,默认取值sync=同步,overwrite=覆盖,merge=合并'), 'sync')
.option('-f, --filetypes', t('要扫描的文件类型'), 'js,vue,html,jsx,ts,mjs,cjs')
.option('-f, --filetypes', t('要扫描的文件类型'), 'js,vue,html,jsx,ts,mjs,cjs')
.option('--languages-location',t("languages文件夹相对位置"),"languages")
.argument('[location]', t('工程项目所在目录'),"./")
.hook("preAction",async function(location){
await i18nScope.change(getCliLanguage())
Expand All @@ -76,9 +77,10 @@ program
options.languages = options.languages.map(l=>({name:l,title:l}))
}
logger.log(t("工程目录:{}"),location)
const langSettingsFile = path.join(location,"languages","settings.json")
logger.log(t("语言目录:{}"),options.languagesLocation)
const langSettingsFile = path.join(location,options.languagesLocation,"settings.json")
if(fs.existsSync(langSettingsFile)){
logger.log(t("语言配置文件<{}>已存在,将优先使用此配置文件中参数来提取文本"),"./languages/settings.json")
logger.log(t("语言配置文件<{}>已存在,将优先使用此配置文件中参数来提取文本"),`${languages-location}/settings.json`)
let lngOptions = fs.readJSONSync(langSettingsFile)
options.languages = lngOptions.languages
options.defaultLanguage = lngOptions.defaultLanguage
Expand Down
11 changes: 6 additions & 5 deletions packages/cli/init.command.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ function getProjectModuleType(srcPath,isTypeScript){
return isTypeScript ? 'esm' : 'cjs'
}

async function initializer(srcPath,{library=false,moduleType,isTypeScript,debug = true,languages=["zh","en"],defaultLanguage="zh",activeLanguage="zh",reset=false}={}){
async function initializer(srcPath,{languagesLocation='languages',library=false,moduleType,isTypeScript,debug = true,languages=["zh","en"],defaultLanguage="zh",activeLanguage="zh",reset=false}={}){
let settings = {}
// 检查当前项目的模块类型
if(!['esm',"cjs"].includes(moduleType)){
Expand All @@ -87,9 +87,8 @@ async function initializer(srcPath,{library=false,moduleType,isTypeScript,debug
const projectPackageJson = getCurrentPackageJson(srcPath)

let tasks = logger.tasklist("初始化VoerkaI18n多语言支持")
const langFolderName = "languages"
// 查找当前项目的语言包类型路径
const lngPath = path.join(srcPath,langFolderName)
const lngPath = path.join(srcPath,languagesLocation)

// 语言文件夹名称
try{
Expand Down Expand Up @@ -165,12 +164,12 @@ async function initializer(srcPath,{library=false,moduleType,isTypeScript,debug



logger.log(t("生成语言配置文件:{}"),"./languages/settings.json")
logger.log(t("生成语言配置文件:{}"),`./${languagesLocation}/settings.json`)
logger.log(t("拟支持的语言:{}"),settings.languages.map(l=>l.name).join(","))
logger.log(t("已安装运行时:{}"),'@voerkai18n/runtime')
logger.log(t("本工程运行在: {}"),library ? "库模式" : "应用模式")
logger.log(t("初始化成功,下一步:"))
logger.log(t(" - 编辑{}确定拟支持的语言种类等参数"),"languages/settings.json")
logger.log(t(" - 编辑{}确定拟支持的语言种类等参数"),`${languagesLocation}/settings.json`)
logger.log(t(" - 运行<{}>扫描提取要翻译的文本"),"voerkai18n extract")
logger.log(t(" - 运行<{}>在线自动翻译"),"voerkai18n translate")
logger.log(t(" - 运行<{}>编译语言包"),"voerkai18n compile")
Expand All @@ -186,6 +185,7 @@ program
.option('-r, --reset', t('重新生成当前项目的语言配置'))
.option('-t, --typescript',t("输出typescript代码"))
.option('-l, --library',t("开发库模式"),false)
.option('--languages-location',t("languages文件夹相对位置"),"languages")
.option('-lngs, --languages <languages...>', t('支持的语言列表'), ['zh','en'])
.option('-d, --defaultLanguage <name>', t('默认语言'), 'zh')
.option('-a, --activeLanguage <name>', t('激活语言'), 'zh')
Expand All @@ -196,6 +196,7 @@ program
options.isTypeScript = options.typescript==undefined ? isTypeScriptProject() : options.typescript
location = getProjectSourceFolder(location)
logger.log(t("工程目录:{}"),location)
logger.log(t("语言目录:{}"),options.languagesLocation)
//
if(options.debug){
logger.format(options,{compact:true})
Expand Down

0 comments on commit 82e6fe3

Please sign in to comment.