diff --git a/conf/wide.go b/conf/wide.go index 5e6384c..2b6c48b 100644 --- a/conf/wide.go +++ b/conf/wide.go @@ -183,7 +183,7 @@ func (*conf) GetExecutableInGOBIN(executable string) string { executable += ".exe" } - gopaths := strings.Split(os.Getenv("GOPATH"), PathListSeparator) + gopaths := filepath.SplitList(os.Getenv("GOPATH")) for _, gopath := range gopaths { // $GOPATH/bin/$GOOS_$GOARCH/executable @@ -264,12 +264,8 @@ func Load() { Wide.ShellChannel = strings.Replace(Wide.ShellChannel, "{IP}", ip, 1) Wide.SessionChannel = strings.Replace(Wide.SessionChannel, "{IP}", ip, 1) - // 获取当前执行路径 - file, _ := exec.LookPath(os.Args[0]) - pwd, _ := filepath.Abs(file) - pwd = pwd[:strings.LastIndex(pwd, PathSeparator)] - Wide.Pwd = pwd - glog.V(3).Infof("pwd [%s]", pwd) + Wide.Pwd = util.OS.Pwd() + glog.V(3).Infof("pwd [%s]", Wide.Pwd) glog.V(3).Info("Conf: \n" + string(bytes)) @@ -280,10 +276,10 @@ func Load() { // // 如果不存在 Workspace 配置所指定的目录路径则创建该目录. func initWorkspaceDirs() { - paths := strings.Split(Wide.GetWorkspace(), PathListSeparator) + paths := filepath.SplitList(Wide.GetWorkspace()) for _, user := range Wide.Users { - paths = append(paths, strings.Split(user.GetWorkspace(), PathListSeparator)...) + paths = append(paths, filepath.SplitList(user.GetWorkspace())...) } diff --git a/editor/editors.go b/editor/editors.go index 85514b0..f5a21b9 100644 --- a/editor/editors.go +++ b/editor/editors.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "os/exec" + "path/filepath" "runtime" "strconv" "strings" @@ -124,7 +125,7 @@ func AutocompleteHandler(w http.ResponseWriter, r *http.Request) { // glog.Infof("offset: %d", offset) userWorkspace := conf.Wide.GetUserWorkspace(username) - workspaces := strings.Split(userWorkspace, conf.PathListSeparator) + workspaces := filepath.SplitList(userWorkspace) libPath := "" for _, workspace := range workspaces { userLib := workspace + conf.PathSeparator + "pkg" + conf.PathSeparator + diff --git a/file/files.go b/file/files.go index 1e1bd28..14b679a 100644 --- a/file/files.go +++ b/file/files.go @@ -46,7 +46,7 @@ func GetFiles(w http.ResponseWriter, r *http.Request) { username := session.Values["username"].(string) userWorkspace := conf.Wide.GetUserWorkspace(username) - workspaces := strings.Split(userWorkspace, conf.PathListSeparator) + workspaces := filepath.SplitList(userWorkspace) root := FileNode{Name: "root", Path: "", IconSkin: "ico-ztree-dir ", Type: "d", FileNodes: []*FileNode{}} diff --git a/i18n/ja_JP.json b/i18n/ja_JP.json new file mode 100644 index 0000000..1c4f4ba --- /dev/null +++ b/i18n/ja_JP.json @@ -0,0 +1,109 @@ +{ + "wide": "Wide", + "isDelete": "削除", + "cancel": "取消", + "file": "ファイル", + "login": "ログイン", + "username": "ユーザ名", + "current_user": "現在のユーザ", + "password": "パスワード", + "login_error": "ログインエラー", + "run": "実行", + "debug": "デバッグ", + "help": "ヘルプ", + "check_update": "更新をチェック", + "report_issues": "問題を報告", + "wide_doc": "Wide ドキュメント", + "about": "Wide について", + "start_page": "スタートページ", + "create_file": "新規ファイル", + "create": "作成", + "create_dir": "新規ディレクトリ", + "delete": "削除", + "save": "保存", + "exit": "終了", + "close_all_files": "全てのファイルを閉じる", + "save_all_files": "全てを保存", + "format": "フォーマット", + "goget": "go get", + "goinstall": "go install", + "build": "ビルド", + "build_n_run": "ビルド実行", + "editor": "エディタ", + "max_editor": "最大化", + "restore_editor": "元のサイズに戻す", + "unread_notification": "未読の通知", + "notification_2": "[gocode] が見つかりません。[Autocomplete] は動作しません。", + "notification_3": "[ide_stub] が見つかりません。[Jump to Decl]、[Find Usages] は動作しません。", + "goto_line": "指定行にジャンプ", + "go": "Go", + "tip": "ヒント", + "confirm": "確認", + "stop": "停止", + "output": "出力", + "search": "検索", + "notification": "通知", + "min": "最小化", + "restore_side": "ファイルツリーを戻す", + "search_text": "テキストを検索", + "find": "検索", + "find_next": "次を検索", + "find_previous": "前を検索", + "replace": "置換", + "replace_all": "全て置換", + "restore_bottom": "ウィンドウを下に戻す", + "file_format": "ファイルの拡張子", + "keyword": "キーワード", + "user_guide": "ユーザガイド", + "dev_guide": "開発ガイド", + "keyboard_shortcuts": "キーボードショートカット", + "ver": "バージョン", + "current_ver": "現在のバージョン", + "dev_team": "開発チーム", + "donate_us": "寄付", + "confirm_save": "保存の確認", + "workspace": "ワークスペース", + "project_address": "プロジェクト", + "community": "コミュニティ", + "autocomplete": "自動補完", + "jump_to_decl": "定義へジャンプ", + "show_expr_info": "式の情報を表示", + "find_usages": "使用方法を検索する", + "delete_line": "行を削除", + "save_editor_file": "保存", + "save_all_editors_files": "全てを保存", + "close_editor": "エディタを閉じる", + "full_screen": "全画面", + "auto_indent": "自動インデント", + "indent": "インデントを増やす", + "unindent": "インデントを減らす", + "focus": "フォーカス", + "switch_tab": "タブを切り替える", + "focus_editor": "エディタにフォーカスを与える", + "focus_file_tree": "ファイルツリーにフォーカスを与える", + "focus_output": "出力にフォーカスを与える", + "focus_search": "検索にフォーカスを与える", + "focus_notification": "通知にフォーカスを与える", + "start-build": "[go build] 開始", + "build-succ": "[go build] 成功", + "build-error": "[go build] 失敗", + "start-test": "[go test] 開始", + "test-succ": "[go test] 成功", + "test-error": "[go test] 失敗", + "start-install": "[go install] 開始", + "install-succ": "[go install] 成功", + "install-error": "[go install] 失敗", + "start-get": "[go get] 開始", + "get-succ": "[go get] 成功", + "get-error": "[go get] 失敗", + "check_version": "更新をチェック中", + "new_version_available": "新しいバージョンがあります", + "go_env": "Go", + "os": "OS", + "project": "プロジェクト", + "license": "ライセンス", + "credits": "クレジット", + "uptodate": "最新です", + "test": "テスト", + "colon": ":" +} diff --git a/i18n/locales.go b/i18n/locales.go index e86e017..632caa5 100644 --- a/i18n/locales.go +++ b/i18n/locales.go @@ -5,6 +5,7 @@ import ( "encoding/json" "io/ioutil" "os" + "strings" "github.com/golang/glog" ) @@ -20,10 +21,18 @@ var Locales = map[string]locale{} // 加载国际化配置. func Load() { - // TODO: 自动加载所有语言配置 + f, _ := os.Open("i18n") + names, _ := f.Readdirnames(-1) + f.Close() - load("zh_CN") - load("en_US") + for _, name := range names { + if !strings.HasSuffix(name, ".json") { + continue + } + + loc := name[:strings.LastIndex(name, ".")] + load(loc) + } } func load(localeStr string) { diff --git a/output/outputs.go b/output/outputs.go index e238d92..55d8a8b 100644 --- a/output/outputs.go +++ b/output/outputs.go @@ -10,6 +10,7 @@ import ( "net/http" "os" "os/exec" + "path/filepath" "runtime" "strconv" "strings" @@ -33,7 +34,7 @@ type Lint struct { File string `json:"file"` LineNo int `json:"lineNo"` Severity string `json:"severity"` - Msg string + Msg string `json:"msg"` } // 建立输出通道. @@ -74,7 +75,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) { } filePath := args["executable"].(string) - curDir := filePath[:strings.LastIndex(filePath, conf.PathSeparator)] + curDir := filepath.Dir(filePath) cmd := exec.Command(filePath) cmd.Dir = curDir @@ -198,7 +199,7 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) { sid := args["sid"].(string) filePath := args["file"].(string) - curDir := filePath[:strings.LastIndex(filePath, conf.PathSeparator)] + curDir := filepath.Dir(filePath) fout, err := os.Create(filePath) @@ -234,7 +235,7 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) { glog.V(5).Infof("go build -o %s", executable) - executable = curDir + conf.PathSeparator + executable + executable = filepath.Join(curDir, executable) // 先把可执行文件删了 err = os.RemoveAll(executable) @@ -354,8 +355,13 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) { file := line[:strings.Index(line, ":")] left := line[strings.Index(line, ":")+1:] - lineNo, _ := strconv.Atoi(left[:strings.Index(left, ":")]) - msg := left[strings.Index(left, ":")+2:] + index := strings.Index(left, ":") + lineNo := 0 + msg := left + if index >= 0 { + lineNo, _ = strconv.Atoi(left[:index]) + msg = left[index+2:] + } lint := &Lint{ File: file, @@ -407,7 +413,7 @@ func GoTestHandler(w http.ResponseWriter, r *http.Request) { sid := args["sid"].(string) filePath := args["file"].(string) - curDir := filePath[:strings.LastIndex(filePath, conf.PathSeparator)] + curDir := filepath.Dir(filePath) cmd := exec.Command("go", "test", "-v") cmd.Dir = curDir @@ -522,7 +528,7 @@ func GoInstallHandler(w http.ResponseWriter, r *http.Request) { sid := args["sid"].(string) filePath := args["file"].(string) - curDir := filePath[:strings.LastIndex(filePath, conf.PathSeparator)] + curDir := filepath.Dir(filePath) cmd := exec.Command("go", "install") cmd.Dir = curDir @@ -621,8 +627,13 @@ func GoInstallHandler(w http.ResponseWriter, r *http.Request) { file := line[:strings.Index(line, ":")] left := line[strings.Index(line, ":")+1:] - lineNo, _ := strconv.Atoi(left[:strings.Index(left, ":")]) - msg := left[strings.Index(left, ":")+2:] + index := strings.Index(left, ":") + lineNo := 0 + msg := left + if index >= 0 { + lineNo, _ = strconv.Atoi(left[:index]) + msg = left[index+2:] + } lint := &Lint{ File: file, @@ -678,7 +689,7 @@ func GoGetHandler(w http.ResponseWriter, r *http.Request) { sid := args["sid"].(string) filePath := args["file"].(string) - curDir := filePath[:strings.LastIndex(filePath, conf.PathSeparator)] + curDir := filepath.Dir(filePath) cmd := exec.Command("go", "get") cmd.Dir = curDir diff --git a/static/css/base-en_US.css b/static/css/base-en_US.css new file mode 100644 index 0000000..e69de29 diff --git a/static/css/base-ja_JP.css b/static/css/base-ja_JP.css new file mode 100644 index 0000000..1ec0f2b --- /dev/null +++ b/static/css/base-ja_JP.css @@ -0,0 +1,8 @@ +body { + font-family: Helvetica, 'MS Gothic'; +} + +input, +button { + font-family: Helvetica, 'MS Gothic'; +} diff --git a/static/css/base-zh_CN.css b/static/css/base-zh_CN.css new file mode 100644 index 0000000..9bfc42a --- /dev/null +++ b/static/css/base-zh_CN.css @@ -0,0 +1,8 @@ +body { + font-family: Helvetica, 'Microsoft Yahei'; +} + +input, +button { + font-family: Helvetica, 'Microsoft Yahei'; +} diff --git a/static/css/base.css b/static/css/base.css index a7c2bfd..7f546e8 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -4,7 +4,7 @@ body { margin: 0; color: #000; overflow: hidden; - font-family: Helvetica, 'Microsoft Yahei'; + font-family: Helvetica; } ul { @@ -19,7 +19,7 @@ ul { input, button { - font-family: Helvetica, 'Microsoft Yahei'; + font-family: Helvetica; } .fn-left { diff --git a/util/os.go b/util/os.go index 7350aeb..8517abe 100644 --- a/util/os.go +++ b/util/os.go @@ -1,6 +1,9 @@ package util import ( + "os" + "os/exec" + "path/filepath" "runtime" ) @@ -13,3 +16,11 @@ var OS = myos{} func (*myos) IsWindows() bool { return "windows" == runtime.GOOS } + +// 获取当前执行程序的工作目录的绝对路径. +func (*myos) Pwd() string { + file, _ := exec.LookPath(os.Args[0]) + pwd, _ := filepath.Abs(file) + + return filepath.Dir(pwd) +} diff --git a/views/index.html b/views/index.html index 597c2e4..05dcc14 100644 --- a/views/index.html +++ b/views/index.html @@ -14,6 +14,7 @@ +