From 984fa7f1ca1b582f77cc511156e9747b175203e5 Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Wed, 20 Jan 2016 14:36:34 -0600 Subject: PLT-7-server-db --- api/admin.go | 2 +- api/api_test.go | 1 + api/context.go | 3 ++- i18n/en.json | 4 ++++ i18n/es.json | 10 +++++++--- model/utils.go | 39 ++++++++++++++++++++++++++++++++------- model/version.go | 2 +- 7 files changed, 48 insertions(+), 13 deletions(-) diff --git a/api/admin.go b/api/admin.go index 61741b445..72a95ba6a 100644 --- a/api/admin.go +++ b/api/admin.go @@ -41,7 +41,7 @@ func getLogs(c *Context, w http.ResponseWriter, r *http.Request) { file, err := os.Open(utils.GetLogFileLocation(utils.Cfg.LogSettings.FileLocation)) if err != nil { - c.Err = model.NewAppError("getLogs", c.T("api.admin.file_read_error"), err.Error()) + c.Err = model.NewLocAppError("getLogs", "api.admin.file_read_error", nil, err.Error()) } defer file.Close() diff --git a/api/api_test.go b/api/api_test.go index 2ef4e196d..4d7192e4b 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -14,6 +14,7 @@ var Client *model.Client func Setup() { if Srv == nil { utils.LoadConfig("config.json") + utils.InitTranslations() utils.Cfg.TeamSettings.MaxUsersPerTeam = 50 NewServer() StartServer() diff --git a/api/context.go b/api/context.go index b6ffb1a29..a3311a971 100644 --- a/api/context.go +++ b/api/context.go @@ -206,6 +206,7 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } if c.Err != nil { + c.Err.Translate(c.T) c.Err.RequestId = c.RequestId c.LogError(c.Err) c.Err.Where = r.URL.Path @@ -373,7 +374,7 @@ func (c *Context) RemoveSessionCookie(w http.ResponseWriter, r *http.Request) { } func (c *Context) SetInvalidParam(where string, name string) { - c.Err = model.NewAppError(where, "Invalid "+name+" parameter", "") + c.Err = model.NewLocAppError(where, "api.context.invalid_param", map[string]interface{}{"Name": name}, "") c.Err.StatusCode = http.StatusBadRequest } diff --git a/i18n/en.json b/i18n/en.json index 67cf9c31e..d1035e89a 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -10,5 +10,9 @@ { "id": "api.admin.file_read_error", "translation": "Error reading log file" + }, + { + "id": "api.context.invalid_param", + "translation": "Invalid {{.Name}} parameter" } ] \ No newline at end of file diff --git a/i18n/es.json b/i18n/es.json index 67cf9c31e..efa5b857b 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -1,14 +1,18 @@ [ { "id": "utils.i18n.loaded", - "translation": "Loaded system translations for '%v' from '%v'" + "translation": "Loaded system translations for '%v' from '%v' spanish test!" }, { "id": "mattermost.current_version", - "translation": "Current version is %v (%v/%v/%v)" + "translation": "Current version is %v (%v/%v/%v) spanish test!" }, { "id": "api.admin.file_read_error", - "translation": "Error reading log file" + "translation": "Error reading log file spanish test!" + }, + { + "id": "api.context.invalid_param", + "translation": "Invalid {{.Name}} parameter spanish test!" } ] \ No newline at end of file diff --git a/model/utils.go b/model/utils.go index 617c95efd..0d26fd3ba 100644 --- a/model/utils.go +++ b/model/utils.go @@ -9,13 +9,15 @@ import ( "encoding/base32" "encoding/json" "fmt" - "github.com/pborman/uuid" "io" "net/mail" "net/url" "regexp" "strings" "time" + + goi18n "github.com/nicksnyder/go-i18n/i18n" + "github.com/pborman/uuid" ) type StringInterface map[string]interface{} @@ -25,18 +27,30 @@ type EncryptStringMap map[string]string // AppError is returned for any http response that's not in the 200 range. type AppError struct { - Message string `json:"message"` // Message to be display to the end user without debugging information - DetailedError string `json:"detailed_error"` // Internal error string to help the developer - RequestId string `json:"request_id"` // The RequestId that's also set in the header - StatusCode int `json:"status_code"` // The http status code - Where string `json:"-"` // The function where it happened in the form of Struct.Func - IsOAuth bool `json:"is_oauth"` // Whether the error is OAuth specific + LocId string `json:"loc_id"` // Message to be display to the end user without debugging information + Message string `json:"message"` // Message to be display to the end user without debugging information + DetailedError string `json:"detailed_error"` // Internal error string to help the developer + RequestId string `json:"request_id"` // The RequestId that's also set in the header + StatusCode int `json:"status_code"` // The http status code + Where string `json:"-"` // The function where it happened in the form of Struct.Func + IsOAuth bool `json:"is_oauth"` // Whether the error is OAuth specific + params map[string]interface{} `json:"-"` } func (er *AppError) Error() string { return er.Where + ": " + er.Message + ", " + er.DetailedError } +func (er *AppError) Translate(T goi18n.TranslateFunc) { + if len(er.Message) == 0 { + if er.params == nil { + er.Message = T(er.LocId) + } else { + er.Message = T(er.LocId, er.params) + } + } +} + func (er *AppError) ToJson() string { b, err := json.Marshal(er) if err != nil { @@ -68,6 +82,17 @@ func NewAppError(where string, message string, details string) *AppError { return ap } +func NewLocAppError(where string, locId string, params map[string]interface{}, details string) *AppError { + ap := &AppError{} + ap.LocId = locId + ap.params = params + ap.Where = where + ap.DetailedError = details + ap.StatusCode = 500 + ap.IsOAuth = false + return ap +} + var encoding = base32.NewEncoding("ybndrfg8ejkmcpqxot1uwisza345h769") // NewId is a globally unique identifier. It is a [A-Z0-9] string 26 diff --git a/model/version.go b/model/version.go index 88334ceea..f503ddb84 100644 --- a/model/version.go +++ b/model/version.go @@ -28,7 +28,7 @@ var CurrentVersion string = versions[0] var BuildNumber = "_BUILD_NUMBER_" var BuildDate = "_BUILD_DATE_" var BuildHash = "_BUILD_HASH_" -var BuildEnterpriseReady = "_BUILD_ENTERPRISE_READY_" +var BuildEnterpriseReady = "false" func SplitVersion(version string) (int64, int64, int64) { parts := strings.Split(version, ".") -- cgit v1.2.3-1-g7c22