提交 b27e59f3 编写于 作者: martianzhang's avatar martianzhang

init english version

上级 153c0c51
...@@ -1116,13 +1116,9 @@ func FormatSuggest(sql string, format string, suggests ...map[string]Rule) (map[ ...@@ -1116,13 +1116,9 @@ func FormatSuggest(sql string, format string, suggests ...map[string]Rule) (map[
id = query.Id(fingerprint) id = query.Id(fingerprint)
} }
// 合并重复的建议 // merge and translation suggestions
suggest := make(map[string]Rule) suggest := Translation(common.Config.Language, suggests...)
for _, s := range suggests {
for item, rule := range s {
suggest[item] = rule
}
}
suggest = MergeConflictHeuristicRules(suggest) suggest = MergeConflictHeuristicRules(suggest)
// 是否忽略显示OK建议,测试的时候大家都喜欢看OK,线上跑起来的时候OK太多反而容易看花眼 // 是否忽略显示OK建议,测试的时候大家都喜欢看OK,线上跑起来的时候OK太多反而容易看花眼
...@@ -1377,3 +1373,38 @@ func ListTestSQLs() { ...@@ -1377,3 +1373,38 @@ func ListTestSQLs() {
fmt.Println(sql) fmt.Println(sql)
} }
} }
// Translation i18n support
func Translation(language string, suggests ...map[string]Rule) map[string]Rule {
// 合并重复的建议
suggest := make(map[string]Rule)
for _, s := range suggests {
for item, rule := range s {
suggest[item] = rule
}
}
// i18n translation
var i18nSuggest map[string]Rule
common.Log.Debug("Translation into : %s language", language)
switch language {
case "english", "en":
i18nSuggest = HeuristicRulesEnglish
}
for item, rule := range suggest {
// check if item exists
if _, ok := i18nSuggest[item]; !ok {
continue
}
// check empty mistake
if i18nSuggest[item].Summary == "" || i18nSuggest[item].Content == "" {
continue
}
rule.Summary = i18nSuggest[item].Summary
rule.Content = i18nSuggest[item].Content
suggest[item] = rule
}
return suggest
}
此差异已折叠。
...@@ -21,6 +21,8 @@ import ( ...@@ -21,6 +21,8 @@ import (
"testing" "testing"
"github.com/XiaoMi/soar/common" "github.com/XiaoMi/soar/common"
"github.com/kr/pretty"
) )
var update = flag.Bool("update", false, "update .golden files") var update = flag.Bool("update", false, "update .golden files")
...@@ -52,3 +54,20 @@ func TestIsIgnoreRule(t *testing.T) { ...@@ -52,3 +54,20 @@ func TestIsIgnoreRule(t *testing.T) {
t.Error("should be true") t.Error("should be true")
} }
} }
func TestTranslation(t *testing.T) {
languages := []string{"english"}
testRules := make(map[string]Rule)
for item, rule := range HeuristicRules {
testRules[item] = rule
}
err := common.GoldenDiff(func() {
for _, language := range languages {
common.Log.Debug("TestTranslation %s", language)
pretty.Println(Translation(language, testRules))
}
}, t.Name(), update)
if nil != err {
t.Fatal(err)
}
}
此差异已折叠。
...@@ -52,6 +52,7 @@ type Configration struct { ...@@ -52,6 +52,7 @@ type Configration struct {
ConnTimeOut int `yaml:"conn-time-out"` // 数据库连接超时时间,单位秒 ConnTimeOut int `yaml:"conn-time-out"` // 数据库连接超时时间,单位秒
QueryTimeOut int `yaml:"query-time-out"` // 数据库SQL执行超时时间,单位秒 QueryTimeOut int `yaml:"query-time-out"` // 数据库SQL执行超时时间,单位秒
Delimiter string `yaml:"delimiter"` // SQL分隔符 Delimiter string `yaml:"delimiter"` // SQL分隔符
Language string `yaml:"language"` // 支持的语言
// +++++++++++++++日志相关+++++++++++++++++ // +++++++++++++++日志相关+++++++++++++++++
// 日志级别,这里使用了beego的log包 // 日志级别,这里使用了beego的log包
...@@ -155,6 +156,7 @@ var Config = &Configration{ ...@@ -155,6 +156,7 @@ var Config = &Configration{
ConnTimeOut: 3, ConnTimeOut: 3,
QueryTimeOut: 30, QueryTimeOut: 30,
Delimiter: ";", Delimiter: ";",
Language: "", // default "" or "chinese" means Chinese
MaxJoinTableCount: 5, MaxJoinTableCount: 5,
MaxGroupByColsCount: 5, MaxGroupByColsCount: 5,
...@@ -487,6 +489,7 @@ func readCmdFlags() error { ...@@ -487,6 +489,7 @@ func readCmdFlags() error {
connTimeOut := flag.Int("conn-time-out", Config.ConnTimeOut, "ConnTimeOut, 数据库连接超时时间,单位秒") connTimeOut := flag.Int("conn-time-out", Config.ConnTimeOut, "ConnTimeOut, 数据库连接超时时间,单位秒")
queryTimeOut := flag.Int("query-time-out", Config.QueryTimeOut, "QueryTimeOut, 数据库SQL执行超时时间,单位秒") queryTimeOut := flag.Int("query-time-out", Config.QueryTimeOut, "QueryTimeOut, 数据库SQL执行超时时间,单位秒")
delimiter := flag.String("delimiter", Config.Delimiter, "Delimiter, SQL分隔符") delimiter := flag.String("delimiter", Config.Delimiter, "Delimiter, SQL分隔符")
language := flag.String("language", Config.Language, "Output language, chinese or english")
// +++++++++++++++日志相关+++++++++++++++++ // +++++++++++++++日志相关+++++++++++++++++
logLevel := flag.Int("log-level", Config.LogLevel, "LogLevel, 日志级别, [0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]") logLevel := flag.Int("log-level", Config.LogLevel, "LogLevel, 日志级别, [0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]")
logOutput := flag.String("log-output", Config.LogOutput, "LogOutput, 日志输出位置") logOutput := flag.String("log-output", Config.LogOutput, "LogOutput, 日志输出位置")
...@@ -571,6 +574,7 @@ func readCmdFlags() error { ...@@ -571,6 +574,7 @@ func readCmdFlags() error {
Config.SamplingStatisticTarget = *samplingStatisticTarget Config.SamplingStatisticTarget = *samplingStatisticTarget
Config.ConnTimeOut = *connTimeOut Config.ConnTimeOut = *connTimeOut
Config.QueryTimeOut = *queryTimeOut Config.QueryTimeOut = *queryTimeOut
Config.Language = *language
Config.LogLevel = *logLevel Config.LogLevel = *logLevel
if strings.HasPrefix(*logOutput, "/") { if strings.HasPrefix(*logOutput, "/") {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册