diff --git a/_examples/i18n/i18n-template/locales/el-GR/other.ini b/_examples/i18n/i18n-template/locales/el-GR/other.ini new file mode 100644 index 00000000..5954cdd3 --- /dev/null +++ b/_examples/i18n/i18n-template/locales/el-GR/other.ini @@ -0,0 +1,10 @@ +[nav] +User = Λογαριασμός + +[debug] +Title = Μενού προγραμματιστή +AccessLog = Πρόσβαση στο αρχείο καταγραφής +AccessLogClear = Καθαρισμός {{tr "debug.AccessLog"}} + +[user.connections] +Title = {{tr "nav.User"}} Συνδέσεις \ No newline at end of file diff --git a/_examples/i18n/i18n-template/locales/en-US/other.ini b/_examples/i18n/i18n-template/locales/en-US/other.ini new file mode 100644 index 00000000..31f1b182 --- /dev/null +++ b/_examples/i18n/i18n-template/locales/en-US/other.ini @@ -0,0 +1,12 @@ +# just an example of some more nested keys, +# see /other endpoint. +[nav] +User = Account + +[debug] +Title = Developer Menu +AccessLog = Access Log +AccessLogClear = Clear {{tr "debug.AccessLog"}} + +[user.connections] +Title = {{tr "nav.User"}} Connections \ No newline at end of file diff --git a/_examples/i18n/i18n-template/main.go b/_examples/i18n/i18n-template/main.go index 9969fffb..b8aa0b1f 100644 --- a/_examples/i18n/i18n-template/main.go +++ b/_examples/i18n/i18n-template/main.go @@ -46,7 +46,10 @@ func newApp() *iris.Application { } } - app.I18n.Load("./locales/*/*", "en-US", "el-GR") + err := app.I18n.Load("./locales/*/*", "en-US", "el-GR") + if err != nil { + panic(err) + } app.Get("/", func(ctx iris.Context) { text := ctx.Tr("HiDogs", iris.Map{ @@ -69,5 +72,11 @@ func newApp() *iris.Application { ctx.WriteString(text) }) + // showcases the other.ini translation file. + app.Get("/other", func(ctx iris.Context) { + ctx.Writef(`AccessLogClear: %s +Title: %s`, ctx.Tr("debug.AccessLogClear"), ctx.Tr("user.connections.Title")) + }) + return app } diff --git a/_examples/i18n/i18n-template/main_test.go b/_examples/i18n/i18n-template/main_test.go index 8861803f..bb2265d9 100644 --- a/_examples/i18n/i18n-template/main_test.go +++ b/_examples/i18n/i18n-template/main_test.go @@ -18,4 +18,9 @@ func TestI18nLoaderFuncMap(t *testing.T) { Body().Equal("There are 42 members registered") e.GET("/").WithHeader("Accept-Language", "el").Expect().Status(httptest.StatusOK). Body().Equal("Γειά 2 σκυλί") + + e.GET("/other").Expect().Status(httptest.StatusOK). + Body().Equal("AccessLogClear: Clear Access Log\nTitle: Account Connections") + e.GET("/other").WithHeader("Accept-Language", "el").Expect().Status(httptest.StatusOK). + Body().Equal("AccessLogClear: Καθαρισμός Πρόσβαση στο αρχείο καταγραφής\nTitle: Λογαριασμός Συνδέσεις") } diff --git a/i18n/loader.go b/i18n/loader.go index 56c1e2c8..42c76438 100644 --- a/i18n/loader.go +++ b/i18n/loader.go @@ -287,11 +287,15 @@ func (l *defaultLocale) GetMessageContext(ctx *context.Context, key string, args } func (l *defaultLocale) getMessage(langInput, key string, args ...interface{}) string { - // search on templates. if tmpl, ok := l.templateKeys[key]; ok { + var data interface{} + if len(args) > 0 { + data = args[0] + } + buf := new(bytes.Buffer) - err := tmpl.Execute(buf, args[0]) + err := tmpl.Execute(buf, data) if err != nil { return err.Error() }