命令行工具 + 多语言支持

This commit is contained in:
Max 2022-02-09 15:45:18 +08:00
parent 85eeab8c19
commit 95a0d1e159
9 changed files with 112 additions and 36 deletions

View file

@ -32,6 +32,14 @@ func Load(cfg config.Config) {
} }
} }
// L 语言包
func L(word string) string {
if trans, has := share.App.L[word]; has {
return trans
}
return word
}
// Init 应用初始化 // Init 应用初始化
func Init(cfg config.Config) { func Init(cfg config.Config) {

View file

@ -6,8 +6,8 @@ import (
var helpCmd = &cobra.Command{ var helpCmd = &cobra.Command{
Use: "help", Use: "help",
Short: "显示命令帮助文档", Short: L("Help for yao"),
Long: `显示命令帮助文档`, Long: L("Help for yao"),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
cmd.Help() cmd.Help()
}, },

View file

@ -10,8 +10,8 @@ import (
var inspectCmd = &cobra.Command{ var inspectCmd = &cobra.Command{
Use: "inspect", Use: "inspect",
Short: "显示当前配置信息", Short: L("Show app configure"),
Long: `显示当前配置信息`, Long: L("Show app configure"),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
Boot() Boot()
res := maps.Map{ res := maps.Map{

View file

@ -13,8 +13,8 @@ import (
var name string var name string
var migrateCmd = &cobra.Command{ var migrateCmd = &cobra.Command{
Use: "migrate", Use: "migrate",
Short: "更新数据结构", Short: L("Update database schema"),
Long: `更新数据库结构`, Long: L("Update database schema"),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
Boot() Boot()
// 加载数据模型 // 加载数据模型

View file

@ -7,21 +7,47 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/yaoapp/yao/config" "github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/share"
) )
var appPath string var appPath string
var envFile string var envFile string
var lang = os.Getenv("YAO_LANG")
var langs = map[string]string{
"Start Engine": "启动象传应用引擎",
"One or more arguments are not correct": "参数错误",
"Application directory": "指定应用路径",
"Environment file": "指定环境变量文件",
"Help for yao": "显示命令帮助文档",
"Show app configure": "显示应用配置信息",
"Update database schema": "更新数据库结构",
"Execute process": "更新数据库结构",
"Show version": "显示当前版本号",
}
// L 多语言切换
func L(words string) string {
if lang == "" {
return words
}
if trans, has := langs[words]; has {
return trans
}
return words
}
var rootCmd = &cobra.Command{ var rootCmd = &cobra.Command{
Use: "xiang", Use: share.BUILDNAME,
Short: "象传应用引擎命令行工具", Short: "Yao App Engine",
Long: `象传应用引擎命令行工具`, Long: `Yao App Engine`,
Args: cobra.MinimumNArgs(1), Args: cobra.MinimumNArgs(1),
CompletionOptions: cobra.CompletionOptions{ CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: true, DisableDefaultCmd: true,
}, },
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, "参数错误", args) fmt.Fprintln(os.Stderr, L("One or more arguments are not correct"), args)
os.Exit(1) os.Exit(1)
}, },
} }
@ -36,8 +62,8 @@ func init() {
runCmd, runCmd,
) )
rootCmd.SetHelpCommand(helpCmd) rootCmd.SetHelpCommand(helpCmd)
rootCmd.PersistentFlags().StringVarP(&appPath, "app", "a", "", "指定应用目录") rootCmd.PersistentFlags().StringVarP(&appPath, "app", "a", "", L("Application directory"))
rootCmd.PersistentFlags().StringVarP(&envFile, "env", "e", "", "指定环境变量文件") rootCmd.PersistentFlags().StringVarP(&envFile, "env", "e", "", L("Environment file"))
} }
// Execute 运行Root // Execute 运行Root

View file

@ -15,8 +15,8 @@ import (
var runCmd = &cobra.Command{ var runCmd = &cobra.Command{
Use: "run", Use: "run",
Short: "运行处理器", Short: L("Execute process"),
Long: `运行处理器`, Long: L("Execute process"),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
defer gou.KillPlugins() defer gou.KillPlugins()
Boot() Boot()

View file

@ -2,6 +2,7 @@ package cmd
import ( import (
"fmt" "fmt"
"os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -16,8 +17,8 @@ import (
var startCmd = &cobra.Command{ var startCmd = &cobra.Command{
Use: "start", Use: "start",
Short: "启动象传应用引擎", Short: L("Start Engine"),
Long: `启动象传应用引擎`, Long: L("Start Engine"),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
defer service.Stop(func() { fmt.Println("服务已关闭") }) defer service.Stop(func() { fmt.Println("服务已关闭") })
Boot() Boot()
@ -28,11 +29,14 @@ var startCmd = &cobra.Command{
mode = "\n" mode = "\n"
} }
fmt.Printf(color.GreenString("象传应用引擎 v%s %s", share.VERSION, mode)) err := engine.Load(config.Conf) // 加载脚本等
if err != nil {
engine.Load(config.Conf) // 加载数据模型 API 等 fmt.Printf(color.RedString("启动失败: %s\n", err.Error()))
os.Exit(1)
}
// 打印应用目录信息 // 打印应用目录信息
fmt.Printf(color.GreenString("象传应用引擎 v%s %s", share.VERSION, mode))
fmt.Printf(color.WhiteString("\n---------------------------------")) fmt.Printf(color.WhiteString("\n---------------------------------"))
fmt.Printf(color.GreenString("\n应用名称: %s v%s", share.App.Name, share.App.Version)) fmt.Printf(color.GreenString("\n应用名称: %s v%s", share.App.Name, share.App.Version))
fmt.Printf(color.GreenString("\n应用根目录: %s", config.Conf.Root)) fmt.Printf(color.GreenString("\n应用根目录: %s", config.Conf.Root))

View file

@ -9,8 +9,8 @@ import (
var versionCmd = &cobra.Command{ var versionCmd = &cobra.Command{
Use: "version", Use: "version",
Short: "显示当前版本号", Short: L("Show version"),
Long: `显示当前版本号`, Long: L("Show version"),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
// Do Stuff Here // Do Stuff Here
fmt.Println(share.VERSION) fmt.Println(share.VERSION)

View file

@ -25,38 +25,76 @@ import (
) )
// Load 根据配置加载 API, FLow, Model, Plugin // Load 根据配置加载 API, FLow, Model, Plugin
func Load(cfg config.Config) { func Load(cfg config.Config) (err error) {
defer func() { err = exception.Catch(recover()) }()
// 加载应用信息
// 第一步: 加载应用信息
app.Load(cfg)
// 第二步: 建立数据库 & 会话连接
share.DBConnect(cfg.DB) // 创建数据库连接 share.DBConnect(cfg.DB) // 创建数据库连接
share.SessionConnect(cfg.Session) // 创建会话服务器链接 share.SessionConnect(cfg.Session) // 创建会话服务器链接
app.Load(cfg) // 加载应用信息 // 加载应用引擎
if os.Getenv("YAO_DEV") != "" { if os.Getenv("YAO_DEV") != "" {
LoadEngine(filepath.Join(os.Getenv("YAO_DEV"), "/xiang")) LoadEngine(filepath.Join(os.Getenv("YAO_DEV"), "/xiang"))
} else { } else {
LoadEngine() LoadEngine()
} }
// 第三步: 加载数据分析引擎
query.Load(cfg) // 加载数据分析引擎 query.Load(cfg) // 加载数据分析引擎
share.Load(cfg) // 加载共享库 lib // 第四步: 加载共享库 & JS 处理器
script.Load(cfg) // 加载JS处理器 script err = share.Load(cfg) // 加载共享库 lib
model.Load(cfg) // 加载数据模型 model if err != nil {
flow.Load(cfg) // 加载业务逻辑 Flow return err
plugin.Load(cfg) // 加载业务插件 plugin }
table.Load(cfg) // 加载数据表格 table err = script.Load(cfg) // 加载JS处理器 script
chart.Load(cfg) // 加载分析图表 chart if err != nil {
page.Load(cfg) // 加载页面 page return err
}
importer.Load(cfg) // 加载数据导入 imports // 第五步: 加载数据模型等
workflow.Load(cfg) // 加载工作流 workflow err = model.Load(cfg) // 加载数据模型 model
api.Load(cfg) // 加载业务接口 API if err != nil {
server.Load(cfg) // 加载服务 return err
}
err = flow.Load(cfg) // 加载业务逻辑 Flow
if err != nil {
return err
}
err = plugin.Load(cfg) // 加载业务插件 plugin
if err != nil {
return err
}
err = table.Load(cfg) // 加载数据表格 table
if err != nil {
return err
}
err = chart.Load(cfg) // 加载分析图表 chart
if err != nil {
return err
}
err = page.Load(cfg) // 加载页面 page
if err != nil {
return err
}
importer.Load(cfg) // 加载数据导入 imports
workflow.Load(cfg) // 加载工作流 workflow
err = api.Load(cfg) // 加载业务接口 API
if err != nil {
return err
}
server.Load(cfg) // 加载服务
// 加密密钥函数 // 加密密钥函数
gou.LoadCrypt(fmt.Sprintf(`{"key":"%s"}`, cfg.DB.AESKey), "AES") gou.LoadCrypt(fmt.Sprintf(`{"key":"%s"}`, cfg.DB.AESKey), "AES")
gou.LoadCrypt(`{}`, "PASSWORD") gou.LoadCrypt(`{}`, "PASSWORD")
return nil
} }
// Reload 根据配置重新加载 API, FLow, Model, Plugin // Reload 根据配置重新加载 API, FLow, Model, Plugin