摘要:前言最近加入到新項目組負責前端技術預研和選型,其中涉及到一個熟悉又陌生的需求國際化本地化。因此不是表示存在多個選擇而是表示沒有適合的選項。
前言
?最近加入到新項目組負責前端技術預研和選型,其中涉及到一個熟悉又陌生的需求——國際化&本地化。熟悉的是之前的項目也玩過,陌生的是之前的實現僅僅停留在"有"的階段而已。趁著這個機會好好學習整理一下,為后面的技術選型做準備。
?本篇作為系列的最后一篇,打算和大家一起看看HTTP的Content Negotiation機制和更多關于本地化的應用方向。
?記得第一次接觸國際化和本地化時是指服務端根據請求頭字段Accept-Language獲取language-tag然后向用戶返回相應的內容,這其實是利用HTTP提供的Content Negotiation機制。
?所謂Content Negotiation機制其實就是通過Accept,Accept-Language和Accept-Encoding等請求頭字段作為依據對存在多個可用展現方式的某一資源選擇最優的展現方式返回給用戶,如語言文化、適合在屏幕上瀏覽還是用于打印等。
?這里又分為服務端協商(Server-driven Negotiation)和代理端協商(Agent-driven Negotiation)
Server-driven Negotiation
?就是擇優返回展現方式的算法由服務端提供的Content Negotiation就是Server-driven Negotiation了。
?一般通過Accept,Accept-Language,Accept-Encoding和User-Agent等請求頭字段作為依據去選擇最優解。
缺點:
服務端永遠無法精準地計算出最優解,部分原因是因為內容如何展現是由代理端決定,而請求中無法獲取代理端的所有信息,若允許獲取代理端的所有信息,那么網絡傳送的數據量將變大而且會涉及隱私安全的問題;
服務端實現復雜度提高;
由于對于同一個url可能會返回不同的響應報文,因此不能利用公用的緩存去暫存響應報文,從而喪失進一步的優化空間。
Agent-driven Negotiation
?就是代理端從服務端接收到一個基本的響應后,然后擇優展現方式的算法由代理端(實際上就是讓用戶自行選擇最優展現方式)提供的Content Negotiation就是Agent-driven Negotiation了。
?注意這里是先從服務端接收一個基本的響應,然后代理根據這個響應再計算最優的展現方式。那么這個基本的響應是什么呢?HTTP/1.1定義300(Multiple Choices)和406(Not Acceptable)兩個HTTP status code來通知代理端這個請求是的采用Agent-driven Negotiation.
?300 Multiple Choices
?當請求的資源在多個位置找到時,這些位置將以列表的形式作為響應報文返回給用戶,由用戶自行選擇具體要訪問哪個位置。若服務端打算推薦某個位置作為優先選擇時,可將該位置作為響應頭字段Location的值返回.
?406 Not Acceptable
?當服務端發現無法滿足請求頭的Accept,Accept-Charset,Accept-Encoding或Accept-Language時,則會返回406狀態編碼。因此406不是表示存在多個選擇而是表示沒有適合的選項。
缺點:
經過代理端計算后,需要發起第二個請求來獲取最優展現形式的具體內容,響應延遲提高。
?綜合上述兩種方式得到一種稱為透明協商(Transparent Negotiation)的方式,其實就是對緩存系統作修改,讓其除URL外還可以識別其他請求頭字段等信息,來映射特定展現方式的響應報文。也就是說擇優算法部分還是由服務端提供。
這里看來國際化/本地化是Content Negotiation的子集哦!
樣式因文化而不同 by :langSelectors Level 4已經加入對BCP 47高級匹配算法的支持,即有以下玩法
En janvier, toutes les boutiques de Londres affichent des panneaux SALE, mais en fait ces magasins sont bien propres!
BIG SALE
甚至還有支持通配符*(雖然現在未被瀏覽器支持)
總結Hi guy!
Hi man!
本系列粗略歸納了國際化&本地化相關內容,若有紕漏請各位指正,謝謝!
尊重原創,轉載請注明來自: http://www.cnblogs.com/fsjohn... ^_^肥仔John
HTTP 請求406如何解決?有截圖
趣解HTTP狀態碼
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80526.html
摘要:前言最近加入到新項目組負責前端技術預研和選型,其中涉及到一個熟悉又陌生的需求國際化本地化。注意蘋果官網采用的是的機制提供本地化功能,和本篇主打前端實現有所區別。它們分別是處理排序的處理日期格式化的和處理數字貨幣等格式化的。 前言 ?最近加入到新項目組負責前端技術預研和選型,其中涉及到一個熟悉又陌生的需求——國際化&本地化。熟悉的是之前的項目也玩過,陌生的是之前的實現僅僅停留在有的階段而...
摘要:前言最近加入到新項目組負責前端技術預研和選型,其中涉及到一個熟悉又陌生的需求國際化本地化。本篇將闡述國際化和本地化的概念,以及其中一個很重要的概念也叫或。語法注意一般采用首字母大寫,后續字母全小寫指定與國家地域對應的語言方言文化。 前言 ?最近加入到新項目組負責前端技術預研和選型,其中涉及到一個熟悉又陌生的需求——國際化&本地化。熟悉的是之前的項目也玩過,陌生的是之前的實現僅僅停留在有...
摘要:一前言圖片上傳是一個普通不過的功能,而圖片預覽就是就是上傳功能中必不可少的子功能了。偶然從上找到純前端圖片預覽的相關資料,經過整理后記錄下來以便日后查閱。類型為,表示在讀取文件時發生的錯誤,只讀。 一、前言 圖片上傳是一個普通不過的功能,而圖片預覽就是就是上傳功能中必不可少的子功能了。在這之前,我曾經通過訂閱input[type=file]元素的onchange事件,一旦更改路徑...
摘要:一鋪搞定一鋪清袋粵語的一鋪搞定其實就是一次完成全部工作的意思,上面關于的屬性,要是每次都逐個設置那要敲多少次鍵盤啊。。。語法粵語的一鋪清袋其實就是把之前的成果一次性歸零。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/...
摘要:也就是說我們操作的幾何公式中的未知變量,而具體的畫圖操作則由渲染引擎處理,而不是我們苦苦哀求設計師幫忙。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/right-radius的水平半徑之和大于元素寬度時,實際值會按比...
閱讀 3059·2023-04-25 20:09
閱讀 3328·2021-11-23 09:51
閱讀 1982·2021-11-22 15:25
閱讀 3362·2021-11-18 10:02
閱讀 2761·2021-09-27 13:56
閱讀 1317·2019-08-30 15:44
閱讀 1160·2019-08-30 13:21
閱讀 3333·2019-08-30 11:05