日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)Revel教程:Revel消息處理

Revel使用文本文件提供國(guó)際化翻譯支持。Revel 支持語(yǔ)言翻譯文件化, 自動(dòng)區(qū)域查詢, cookie重寫、嵌套的消息與參數(shù)。

成都創(chuàng)新互聯(lián)堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十余年網(wǎng)站建設(shè)經(jīng)驗(yàn)成都創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營(yíng)銷服務(wù)商,為您提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5技術(shù)、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、小程序制作服務(wù),給眾多知名企業(yè)提供過(guò)好品質(zhì)的建站服務(wù)。

詞匯表

  • Locale(語(yǔ)言環(huán)境): 包含 語(yǔ)言 和 區(qū)域兩個(gè)部分,指示用戶的語(yǔ)言偏好,例如 en-US。
  • Language(語(yǔ)言): locale 的語(yǔ)言部分, 例如 en。 語(yǔ)言標(biāo)識(shí)符請(qǐng)參考 ISO 639-1 codes。
  • Region(區(qū)域): locale 的區(qū)域部分, 例如 US。 區(qū)域標(biāo)識(shí)符請(qǐng)參考 ISO 3166-1 alpha-2 codes。

示例程序

Revel 處理消息文件和國(guó)際化的方法與其他框架類似。如果你想立馬上手, 可以參考示例程序 revel/samples/i18n,里面包含所有的基礎(chǔ)知識(shí)。

消息文件

國(guó)際化消息在消息文件中定義。這些消息在渲染視圖模板(或程序的其他地方)時(shí)使用。當(dāng)創(chuàng)建新的消息文件時(shí),需要遵循幾個(gè)規(guī)則:

  • 所有的消息文件應(yīng)存放在應(yīng)用程序根目錄的messages目錄中。
  • 文件擴(kuò)展名與 language 一致,并且應(yīng)為 ISO 639-1 code。
  • 消息文件應(yīng)該是 UTF-8 編碼。雖然不是強(qiáng)制規(guī)定, 最好還是遵循這個(gè)約定。
  • 消息文件必須是 goconfig 文件 支持多有的 goconfig 特性

組織消息文件

消息文件的文件名??沒(méi)有任何限制; 只要擴(kuò)展名合法就行。每種語(yǔ)言的文件數(shù)量也沒(méi)有限制。當(dāng)應(yīng)用程序啟動(dòng)時(shí),Revel會(huì)解析messages語(yǔ)言目錄中所有的擴(kuò)展名合法的消息文件,并根據(jù)語(yǔ)言將它們合并。這意味著你可以自由組織你的消息文件。

例如,您可能希望采取傳統(tǒng)的方法,在一個(gè)文件中定義所有的:

/app
    /messages
        messages.en
        messages.fr
        ...

或者是為每種語(yǔ)言創(chuàng)建多個(gè)文件,并根據(jù)分類組織他們:

/app
    /messages
        labels.en
        warnings.en
        labels.fr
        warnings.fr
        ...

重要注意事項(xiàng): 在同一語(yǔ)言的多個(gè)文件中,雖然技術(shù)上可以定義相同的消息key,但是這將導(dǎo)致不可預(yù)知的行為。當(dāng)每種語(yǔ)言定義了多個(gè)文件時(shí),請(qǐng)注意保持您的key唯一,這樣文件合并后,key將不會(huì)被覆蓋!

消息 key 和 值

消息文件是一個(gè) goconfig 文件。這意味著,消息應(yīng)按照key-value格式定義:

key=value

舉個(gè)栗子:

greeting=Hello 
greeting.name=Rob
greeting.suffix=, welcome to Revel!

goconfig 文件被分成多個(gè) sections默認(rèn)的段 總是存在, 并且包含未指定段時(shí)定義的消息。例如:

key=value

[SECTION]
key2=value2

key=value 消息消息被隱式放置在默認(rèn)段中,因?yàn)樗鼪](méi)有定義在一個(gè)指定的段中。

消息文件的所有消息應(yīng)在定義默認(rèn)的段中,除非它們是用于某個(gè)特定區(qū)域(見(jiàn)Regions獲取更多消息)。

注意: 段是 goconfig 功能.

區(qū)域

特定區(qū)域的消息應(yīng)當(dāng)在相同的段中定義。Region-specific messages should be defined in sections with the same name. 例如,假設(shè)我們要對(duì)所有講英語(yǔ)的用戶顯示 "Hello", 對(duì)英國(guó)用戶顯示 "Hey" ,對(duì)講美國(guó)用戶顯示 "Howdy"。 為了做到這一點(diǎn),我們可以定義下面的消息文件 greeting.en:

greeting=Hello

[GB]
greeting=Hey

[US]
greeting=Howdy

對(duì)于定義了英語(yǔ) (en) 作為他們的首選語(yǔ)言時(shí),Revel 會(huì)將greeting 解析成 Hello。只有在用戶的區(qū)域被明確定義的情況下,比如en-GB 或 en-US ,Revel 才會(huì)用對(duì)應(yīng)段中的消息去解析 greeting

重要提示: 如果定義了一個(gè)不合法的區(qū)域,技術(shù)上是允許的,但是它們永遠(yuǎn)不會(huì)被解析。

引用 和 參數(shù)

引用

文件中的消息也可以引用其他消息。這使得用戶可以從一個(gè)或多個(gè)其它的消息組成一個(gè)單一的消息。引用消息的語(yǔ)法是 %(key)s. 例如:

greeting=Hello 
greeting.name=Rob
greeting.suffix=, welcome to Revel!
greeting.full=%(greeting)s %(greeting.name)s%(greeting.suffix)s

注意:

  • 引用是 goconfig 的功能.
  • 因?yàn)橄⑽募梢院喜?,多以只要它們被定義為同一種語(yǔ)言,就可以引用其他文件中的消息。

參數(shù)

消息支持一個(gè)或多個(gè)參數(shù)。在消息中參數(shù)使用與 fmt 包相同的規(guī)則去解析。 例如:

greeting.name_arg=Hello %s!

參數(shù)按照給定的順序進(jìn)行解析,參考 解析消息.

解析客戶端語(yǔ)言環(huán)境(locale)

為了找出用戶喜歡的語(yǔ)言環(huán)境,Revel會(huì)在以下地方查找一個(gè)可用的語(yǔ)言環(huán)境:

  1. 語(yǔ)言 cookie

    對(duì)于每次請(qǐng)求,框架會(huì)查找應(yīng)用程序配置 (i18n.cookie)。如果找到了,它的值被假定為當(dāng)前的語(yǔ)言環(huán)境。當(dāng)一個(gè)cookie已經(jīng)發(fā)現(xiàn),所有其他解析方法將被跳過(guò)。

  2. Accept-Language HTTP 頭

    對(duì)于每次請(qǐng)求,Revel 會(huì)自動(dòng)解析 HTTP 頭信息的 Accept-Language。其中的每個(gè)語(yǔ)言環(huán)境根據(jù) HTTP 規(guī)范在當(dāng)前Request實(shí)例中獲取和存儲(chǔ)。此信息用來(lái)為稍后的消息解析函數(shù)確定當(dāng)前語(yǔ)言環(huán)境。

    更多信息請(qǐng)參考 Parsed Accept-Language HTTP header.

  3. 默認(rèn)語(yǔ)言

    當(dāng)以上所有方法都沒(méi)有找到可用的客戶端語(yǔ)言環(huán)境時(shí),框架將使用配置文件中定義的默認(rèn)語(yǔ)言i18n.default_language。

如果有的消息解析失敗,則返回一個(gè)包含原始消息名的特殊格式的字符串。

注意: Accept-Language 頭信息 總是 被解析并保存到當(dāng)前 Request中, 即使它已經(jīng)存在。在這種情況下,頭信息中的值即使從未被消息解析功能使用,但是仍可以在需要他們的時(shí)候使用。

檢查當(dāng)前語(yǔ)言環(huán)境

應(yīng)用程序可以從Request內(nèi)部使用 Request.Locale 屬性訪問(wèn)當(dāng)前語(yǔ)言環(huán)境。例如:

func (c App) Index() revel.Result {
    currentLocale := c.Request.Locale
    c.Render(currentLocale)
}

在模板中, 就可以從 renderArgs 中的 currentLocale 變量中訪問(wèn)當(dāng)前語(yǔ)言環(huán)境。 例如:

    

Current preferred locale: {{.currentLocale}}

解析 Accept-Language HTTP 頭信息

如果程序需要訪問(wèn) Accept-Language HTTP 頭信息, 可以從 Controller 實(shí)例的 Request中獲取。 AcceptLanguages 字段(AcceptLanguage實(shí)例的切片)包含所有從各自的頭信息中解析的值, 最合適的值是切片中的第一個(gè)。例如:

func (c App) Index() revel.Result {
    // 獲取所有解析到的AcceptLanguage的字符串表示形式
    c.RenderArgs["acceptLanguageHeaderParsed"] = c.Request.AcceptLanguages.String()
    // 返回最合適AcceptLanguage實(shí)例
    c.RenderArgs["acceptLanguageHeaderMostQualified"] = c.Request.AcceptLanguages[0]

    c.Render()
}

更多信息請(qǐng)參考 HTTP 規(guī)范.

解析消息

消息可以在 控制器 或 模板中解析。

控制器

控制器中使用 Message(message string, args ...interface{}) 函數(shù)使用當(dāng)前語(yǔ)言環(huán)境解析消息:

func (c App) Index() revel.Result {
    c.RenderArgs["controllerGreeting"] = c.Message("greeting")
    c.Render()
}

模板

在模板中使用 模板函數(shù) msg 解析當(dāng)前語(yǔ)言環(huán)境的消息。例如:

    

Greetings without arguments: {{msg . "greeting"}}

Greetings: {{msg . "greeting.full.name" "Tommy Lee Jones"}}

注意: msg 函數(shù)的簽名是 msg . "message name" "argument" "argument". 如果沒(méi)有參數(shù), 可以忽略。

配置

文件 選項(xiàng) 描述
app.conf i18n.cookie 語(yǔ)言cookie的名稱。應(yīng)使用Revel cookie的前綴,以避免cookie名稱沖突。
app.conf i18n.default_language 默認(rèn)的語(yǔ)言環(huán)境,在沒(méi)有首選區(qū)域的情況下使用。

分享題目:創(chuàng)新互聯(lián)Revel教程:Revel消息處理
URL鏈接:http://www.dlmjj.cn/article/codiddh.html