对于每次请求,框架会查找应用程序配置 (i18n.cookie
)。如果找到了,它的值被假定为当前的语言环境。当一个cookie已经发现,所有其他解析方法将被跳过。
Accept-Language
HTTP 头
对于每次请求,Revel 会自动解析 HTTP 头信息的 Accept-Language
。其中的每个语言环境根据 HTTP 规范在当前Request
实例中获取和存储。此信息用来为稍后的消息解析函数确定当前语言环境。
更多信息请参考 Parsed Accept-Language HTTP header.
默认语言
当以上所有方法都没有找到可用的客户端语言环境时,框架将使用配置文件中定义的默认语言i18n.default_language
。
如果有的消息解析失败,则返回一个包含原始消息名的特殊格式的字符串。
注意: Accept-Language
头信息 总是 被解析并保存到当前 Request
中, 即使它已经存在。在这种情况下,头信息中的值即使从未被消息解析功能使用,但是仍可以在需要他们的时候使用。
检查当前语言环境
应用程序可以从Request
内部使用 Request.Locale
属性访问当前语言环境。例如:
func (c App) Index() revel.Result {
currentLocale := c.Request.Locale
c.Render(currentLocale)
}
在模板中, 就可以从 renderArgs
中的 currentLocale
变量中访问当前语言环境。 例如:
<p>Current preferred locale: {{.currentLocale}}</p>
解析 Accept-Language HTTP 头信息
如果程序需要访问 Accept-Language
HTTP 头信息, 可以从 Controller
实例的 Request
中获取。 AcceptLanguages
字段(AcceptLanguage
实例的切片)包含所有从各自的头信息中解析的值, 最合适的值是切片中的第一个。例如:
func (c App) Index() revel.Result {
// 获取所有解析到的AcceptLanguage的字符串表示形式
c.RenderArgs["acceptLanguageHeaderParsed"] = c.Request.AcceptLanguages.String()
// 返回最合适AcceptLanguage实例
c.RenderArgs["acceptLanguageHeaderMostQualified"] = c.Request.AcceptLanguages[0]
c.Render()
}
更多信息请参考 HTTP 规范.
解析消息
消息可以在 控制器 或 模板中解析。
控制器
控制器中使用 Message(message string, args ...interface{})
函数使用当前语言环境解析消息:
func (c App) Index() revel.Result {
c.RenderArgs["controllerGreeting"] = c.Message("greeting")
c.Render()
}
模板
在模板中使用 模板函数 msg
解析当前语言环境的消息。例如:
<p>Greetings without arguments: {{msg . "greeting"}}</p>
<p>Greetings: {{msg . "greeting.full.name" "Tommy Lee Jones"}}</p>
注意: msg
函数的签名是 msg . "message name" "argument" "argument"
. 如果没有参数, 可以忽略。
配置
文件 | 选项 | 描述 |
---|---|---|
app.conf | i18n.cookie | 语言cookie的名称。应使用Revel cookie的前缀,以避免cookie名称冲突。 |
app.conf | i18n.default_language | 默认的语言环境,在没有首选区域的情况下使用。 |
标签:Revel
相关阅读 >>
更多相关阅读请进入《Revel》频道 >>

Go语言101
一个与时俱进的Go编程知识库。