Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fa40607

Browse files
author
David Hunter
committed
Merge pull request revel#852 from evalphobia/feature/config-i18n-default-format
Added i18n setting for unknown message value format.
2 parents f50c820 + d7c0cc2 commit fa40607

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

i18n.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ import (
1212
const (
1313
CurrentLocaleRenderArg = "currentLocale" // The key for the current locale render arg value
1414

15-
messageFilesDirectory = "messages"
16-
messageFilePattern = `^\w+\.[a-zA-Z]{2}$`
17-
unknownValueFormat = "??? %s ???"
18-
defaultLanguageOption = "i18n.default_language"
19-
localeCookieConfigKey = "i18n.cookie"
15+
messageFilesDirectory = "messages"
16+
messageFilePattern = `^\w+\.[a-zA-Z]{2}$`
17+
defaultUnknownFormat = "??? %s ???"
18+
unknownFormatConfigKey = "i18n.unknown_format"
19+
defaultLanguageOption = "i18n.default_language"
20+
localeCookieConfigKey = "i18n.cookie"
2021
)
2122

2223
var (
@@ -40,6 +41,7 @@ func MessageLanguages() []string {
4041
// When either an unknown locale or message is detected, a specially formatted string is returned.
4142
func Message(locale, message string, args ...interface{}) string {
4243
language, region := parseLocale(locale)
44+
unknownValueFormat := getUnknownValueFormat()
4345

4446
messageConfig, knownLanguage := messages[language]
4547
if !knownLanguage {
@@ -84,6 +86,11 @@ func parseLocale(locale string) (language, region string) {
8486
return locale, ""
8587
}
8688

89+
// Retrieve message format or default format when i18n message is missing.
90+
func getUnknownValueFormat() string {
91+
return Config.StringDefault(unknownFormatConfigKey, defaultUnknownFormat)
92+
}
93+
8794
// Recursively read and cache all available messages from all message files on the given path.
8895
func loadMessages(path string) {
8996
messages = make(map[string]*config.Config)

i18n_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,24 @@ func TestBeforeRequest(t *testing.T) {
132132
}
133133
}
134134

135+
func TestI18nMessageUnknownValueFormat(t *testing.T) {
136+
loadMessages(testDataPath)
137+
loadTestI18nConfigWithUnknowFormatOption(t)
138+
139+
// Assert that we can get a message and we get the expected return value
140+
if message := Message("en", "greeting"); message != "Hello" {
141+
t.Errorf("Message 'greeting' for locale 'en' (%s) does not have the expected value", message)
142+
}
143+
144+
// Assert that we get the expected return value with original format
145+
if message := Message("unknown locale", "message"); message != "*** message ***" {
146+
t.Error("Locale 'unknown locale' is not supposed to exist")
147+
}
148+
if message := Message("nl", "unknown message"); message != "*** unknown message ***" {
149+
t.Error("Message 'unknown message' is not supposed to exist")
150+
}
151+
}
152+
135153
func BenchmarkI18nLoadMessages(b *testing.B) {
136154
excludeFromTimer(b, func() { TRACE = log.New(ioutil.Discard, "", 0) })
137155

@@ -184,6 +202,11 @@ func loadTestI18nConfigWithoutLanguageCookieOption(t *testing.T) {
184202
Config.config.RemoveOption("DEFAULT", "i18n.cookie")
185203
}
186204

205+
func loadTestI18nConfigWithUnknowFormatOption(t *testing.T) {
206+
loadTestI18nConfig(t)
207+
Config.config.AddOption("DEFAULT", "i18n.unknown_format", "*** %s ***")
208+
}
209+
187210
func buildRequestWithCookie(name, value string) *Request {
188211
httpRequest, _ := http.NewRequest("GET", "/", nil)
189212
request := NewRequest(httpRequest)

skeleton/conf/app.conf.template

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ log.error.prefix = "ERROR "
8888
# The default language of this application.
8989
i18n.default_language = en
9090

91+
# The default format when message is missing.
92+
# The original message shows in %s
93+
#i18n.unknown_format = "??? %s ???"
94+
9195

9296
# Module to serve static content such as CSS, JavaScript and Media files
9397
# Allows Routes like this:

0 commit comments

Comments
 (0)