mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
PLT-1800 Load server side locale from the config.json (#3135)
* PLT-1800 Load server side locale from the config.json * Add support for locales with country specifics * Fix localization on served locale file as plain/text * Remove github.com/cloudfoundry/jibber_jabber as vendor dependency
This commit is contained in:
committed by
Christopher Speller
parent
7be2a05cf5
commit
b00a60ab71
@@ -246,7 +246,8 @@ func getClientConfig(c *model.Config) map[string]string {
|
||||
props["WebsocketPort"] = fmt.Sprintf("%v", *c.ServiceSettings.WebsocketPort)
|
||||
props["WebsocketSecurePort"] = fmt.Sprintf("%v", *c.ServiceSettings.WebsocketSecurePort)
|
||||
|
||||
props["AllowCorsFrom"] = *c.ServiceSettings.AllowCorsFrom
|
||||
props["DefaultClientLocale"] = *c.LocalizationSettings.DefaultClientLocale
|
||||
props["AvailableLocales"] = *c.LocalizationSettings.AvailableLocales
|
||||
|
||||
if IsLicensed {
|
||||
if *License.Features.CustomBrand {
|
||||
|
||||
@@ -9,5 +9,5 @@ import (
|
||||
|
||||
func TestConfig(t *testing.T) {
|
||||
LoadConfig("config.json")
|
||||
InitTranslations()
|
||||
InitTranslations(Cfg.LocalizationSettings)
|
||||
}
|
||||
|
||||
@@ -7,15 +7,16 @@ import (
|
||||
"strings"
|
||||
|
||||
l4g "github.com/alecthomas/log4go"
|
||||
"github.com/cloudfoundry/jibber_jabber"
|
||||
"github.com/mattermost/platform/model"
|
||||
"github.com/nicksnyder/go-i18n/i18n"
|
||||
)
|
||||
|
||||
var T i18n.TranslateFunc
|
||||
var locales map[string]string = make(map[string]string)
|
||||
var settings model.LocalizationSettings
|
||||
|
||||
func InitTranslations() {
|
||||
func InitTranslations(localizationSettings model.LocalizationSettings) {
|
||||
settings = localizationSettings
|
||||
InitTranslationsWithDir("i18n")
|
||||
}
|
||||
|
||||
@@ -34,14 +35,10 @@ func InitTranslationsWithDir(dir string) {
|
||||
}
|
||||
|
||||
func GetTranslationsBySystemLocale() i18n.TranslateFunc {
|
||||
locale := model.DEFAULT_LOCALE
|
||||
if userLanguage, err := jibber_jabber.DetectLanguage(); err == nil {
|
||||
if _, ok := locales[userLanguage]; ok {
|
||||
locale = userLanguage
|
||||
} else {
|
||||
l4g.Error("Failed to load system translations for '%v' attempting to fall back to '%v'", locale, model.DEFAULT_LOCALE)
|
||||
locale = model.DEFAULT_LOCALE
|
||||
}
|
||||
locale := *settings.DefaultServerLocale
|
||||
if _, ok := locales[locale]; !ok {
|
||||
l4g.Error("Failed to load system translations for '%v' attempting to fall back to '%v'", locale, model.DEFAULT_LOCALE)
|
||||
locale = model.DEFAULT_LOCALE
|
||||
}
|
||||
|
||||
if locales[locale] == "" {
|
||||
@@ -72,10 +69,20 @@ func SetTranslations(locale string) i18n.TranslateFunc {
|
||||
}
|
||||
|
||||
func GetTranslationsAndLocale(w http.ResponseWriter, r *http.Request) (i18n.TranslateFunc, string) {
|
||||
// This is for checking against locales like pt_BR or zn_CN
|
||||
headerLocaleFull := strings.Split(r.Header.Get("Accept-Language"), ",")[0]
|
||||
// This is for checking agains locales like en, es
|
||||
headerLocale := strings.Split(strings.Split(r.Header.Get("Accept-Language"), ",")[0], "-")[0]
|
||||
if locales[headerLocale] != "" {
|
||||
defaultLocale := *settings.DefaultClientLocale
|
||||
if locales[headerLocaleFull] != "" {
|
||||
translations := TfuncWithFallback(headerLocaleFull)
|
||||
return translations, headerLocaleFull
|
||||
} else if locales[headerLocale] != "" {
|
||||
translations := TfuncWithFallback(headerLocale)
|
||||
return translations, headerLocale
|
||||
} else if locales[defaultLocale] != "" {
|
||||
translations := TfuncWithFallback(defaultLocale)
|
||||
return translations, headerLocale
|
||||
}
|
||||
|
||||
translations := TfuncWithFallback(model.DEFAULT_LOCALE)
|
||||
@@ -89,7 +96,7 @@ func TfuncWithFallback(pref string) i18n.TranslateFunc {
|
||||
return translated
|
||||
}
|
||||
|
||||
t, _ := i18n.Tfunc("en")
|
||||
t, _ := i18n.Tfunc(model.DEFAULT_LOCALE)
|
||||
return t(translationID, args...)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user