amuse.git

commit 60df2e00ca7b7ba6a13baa48aa8f4478592b06a9

Author: Adam <git@apiote.tk>

fall back if accept-language is unknown

 front/html.go | 5 ++++-
 i18n/i18n.go | 25 ++++++++++++++++++-------


diff --git a/front/html.go b/front/html.go
index f7e5f2b856d087643c548ddde1cb1d391156cdfa..ba3a5538dbd09c060afbd05140f8b5eebb5248a2 100644
--- a/front/html.go
+++ b/front/html.go
@@ -60,7 +60,10 @@ }
 
 func render(languages []language.Tag, data RenderData, file string) string {
 	i18n.LoadServerLangs()
-	language := i18n.Match(languages)
+	language, err := i18n.Match(languages)
+	if err != nil {
+		// todo show warning
+	}
 	strings, err := i18n.LoadStrings(language)
 	if err != nil {
 		// todo return http:500




diff --git a/i18n/i18n.go b/i18n/i18n.go
index 30e2f263365f502821ae88f1e6b3ed7cd2697056..99e12f7f787c02ae60cf4ca82b0a035c0eb4a56f 100644
--- a/i18n/i18n.go
+++ b/i18n/i18n.go
@@ -75,16 +75,23 @@ 		serverLangs = append(serverLangs, language.Make(tag))
 	}
 }
 
-func Match(acceptLanguages []language.Tag) string {
+func Match(acceptLanguages []language.Tag) (language.Tag, error) {
 	var matcher = language.NewMatcher(serverLangs)
 	tag, _, _ := matcher.Match(acceptLanguages...)
-	return tag.String()
+	b, s, r := tag.Raw()
+	t, err := language.Compose(b, s, r)
+	return t, err
 }
 
 func loadStringsFile(args ...interface{}) (interface{}, error) {
-	language := args[0].(string)
-	var strings Translation
-	_, err := toml.DecodeFile(filepath.Join(config.DataHome+"/i18n", language+".toml"), &strings)
+	var (
+		strings Translation
+		err     error
+	)
+	if langTag, ok := args[0].(language.Tag); ok {
+		language := langTag.String()
+		_, err = toml.DecodeFile(filepath.Join(config.DataHome+"/i18n", language+".toml"), &strings)
+	}
 	args[1] = strings
 	return gott.Tuple(args), err
 }
@@ -117,7 +124,7 @@ 	args[1] = strings
 	return gott.Tuple(args)
 }
 
-func LoadStrings(language string) (Translation, error) {
+func LoadStrings(language language.Tag) (Translation, error) {
 	r, err := gott.
 		NewResult(gott.Tuple{language, Translation{}, Translation{}}).
 		Bind(loadStringsFile).
@@ -125,7 +132,11 @@ 		Bind(loadDefaultStringsFile).
 		Map(loadStrings).
 		Finish()
 
-	return r.(gott.Tuple)[1].(Translation), err
+	if err == nil {
+		return r.(gott.Tuple)[1].(Translation), nil
+	} else {
+		return Translation{}, err
+	}
 }
 
 func FormatDate(date time.Time, format string, translation map[string]string) string {