首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS魔法堂:不完全国际化&本地化手册 之 拓展篇

JS魔法堂:不完全国际化&本地化手册 之 拓展篇

作者头像
^_^肥仔John
发布于 2018-01-18 09:33:54
发布于 2018-01-18 09:33:54
54300
代码可运行
举报
运行总次数:0
代码可运行

前言

 最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已。趁着这个机会好好学习整理一下,为后面的技术选型做准备。  本篇作为系列的最后一篇,打算和大家一起看看HTTP的Content Negotiation机制和更多关于本地化的应用方向。

Content Negotiation(内容协同)

 记得第一次接触国际化和本地化时是指服务端根据请求头字段Accept-Language获取language-tag然后向用户返回相应的内容,这其实是利用HTTP提供的Content Negotiation机制。  所谓Content Negotiation机制其实就是通过Accept,Accept-LanguageAccept-Encoding等请求头字段作为依据对存在多个可用展现方式的某一资源选择最优的展现方式返回给用户,如语言文化、适合在屏幕上浏览还是用于打印等。  这里又分为服务端协商(Server-driven Negotiation)和代理端协商(Agent-driven Negotiation)

  1. Server-driven Negotiation  就是择优返回展现方式的算法由服务端提供的Content Negotiation就是Server-driven Negotiation了。  一般通过Accept,Accept-Language,Accept-EncodingUser-Agent等请求头字段作为依据去选择最优解。 缺点:

a. 服务端永远无法精准地计算出最优解,部分原因是因为内容如何展现是由代理端决定,而请求中无法获取代理端的所有信息,若允许获取代理端的所有信息,那么网络传送的数据量将变大而且会涉及隐私安全的问题;

b. 服务端实现复杂度提高;

c. 由于对于同一个url可能会返回不同的响应报文,因此不能利用公用的缓存去暂存响应报文,从而丧失进一步的优化空间。

  1. 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-EncodingAccept-Language时,则会返回406状态编码。因此406不是表示存在多个选择而是表示没有适合的选项。 缺点:

a. 经过代理端计算后,需要发起第二个请求来获取最优展现形式的具体内容,响应延迟提高。  综合上述两种方式得到一种称为透明协商(Transparent Negotiation)的方式,其实就是对缓存系统作修改,让其除URL外还可以识别其他请求头字段等信息,来映射特定展现方式的响应报文。也就是说择优算法部分还是由服务端提供。

这里看来国际化/本地化是Content Negotiation的子集哦!

样式因文化而不同 by :lang

Selectors Level 4已经加入对BCP 47高级匹配算法的支持,即有以下玩法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
:lang(en){ color: red; }
div:lang(en-GB){ color: red; }
</style>
<p>En janvier, toutes les boutiques de Londres affichent des panneaux 
<span lang="en-GB">SALE</span>, mais en fait ces magasins sont bien propres!</p>
<div lang="en-GB">BIG SALE</div>

甚至还有支持通配符*(虽然现在未被浏览器支持)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
:lang(*-CH){color: red}
</style>
<p lang="de-CH">Hi guy!</p>
<p lang="it-CH">Hi man!</p>

总结

本系列粗略归纳了国际化&本地化相关内容,若有纰漏请各位指正,谢谢!

感谢

HTTP 请求406如何解决?有截图 趣解HTTP状态码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3.HTTP报文内的HTTP信息
HTTP通信过程包括从客户端发往服务端的请求及从服务端返回客户端的响应.本章就来让我们了解一下请求和响应是怎么运作的.
py3study
2020/01/10
7470
内容协商 (Content Negotiation)
大多数响应包含一个实体,此实体包含人类用户能理解的信息。通常,希望提供给用户相应于请求最容易得到的实体。对服务器和缓存来说,不幸的是,并不是所有的用户都对这个最容易得到的实体有喜好,并且并不是所有的用户代理(如web浏览器)都能一致的呈现这些实体。所以,HTTP提供了一些“内容协商”机制 — 当有多个可得的表现形式的时候,对特定的响应选择最好的表现形式的处理过程。 注意:没有称做“格式协商”(译注:“格式”指的是“媒体类型”)的,因为可替换的表现形式可能会同原来的有相同的媒体类型,只是利用了此媒体类型不同
张善友
2018/01/29
1.1K0
JS魔法堂:不完全国际化&本地化手册 之 实战篇
前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已。趁着这个机会好好学习整理一下
^_^肥仔John
2018/01/18
1.6K0
JS魔法堂:不完全国际化&本地化手册 之 实战篇
解析HTTP报文
在说报文之前,我们先来了解一下报文(message),它是HTTP通信中的基本单位,由8位组字节流(octetsequence,其中octet为8个比特)组成,通过HTTP通信传输。
smile风的色彩
2023/04/26
1.8K1
解析HTTP报文
HTTP 的常见头字段有哪些?说说它们的作用
今天带大家学习一些 HTTP 常见的头字段,谈谈它们的作用,并附带一些实际使用场景。
前端西瓜哥
2022/08/18
1K0
HTTP 的常见头字段有哪些?说说它们的作用
真正“搞”懂HTTP协议06之body的玩法(理论篇)
  本来啊,本来,本来我在准备完善这个鸽了四年的系列的时候,是打算按照时间的顺序来完成的,好吧。我承认那个时候考虑的稍稍稍稍稍微有些不足,就是我忽略了HTTP协议的“模块性“。因为虽然按照时间顺序写写流水账好像是个不错的选择,但是写着写着发现,其实HTTP的头字段,往往是一块一块的,这一块的部分包含了某一系列的字段作为请求和应答的协商方式。
zaking
2022/12/09
4640
三、《图解HTTP》- 报文内的 HTTP信息
为了提高HTTP传输效率,在请求中可以通过HTTP请求报文和实体加工的方式对于报文原文进行“编码”,这里的编码并不是单指文本字符串,而是更抽象意义上的编码。
阿东
2022/08/12
4240
三、《图解HTTP》- 报文内的 HTTP信息
TCP/IP协议族(二) HTTP报文头解析
本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述。下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每个值之间有逗号分隔。如果该值需要优先级,那么在值的后方跟上优先级q=0.8(q的值由0~1,优先级从低到高)。值与优先级中间由分号相隔。 头部字段名:值1, 值2;q=0.8 下方就是截取的网络请求中Request Headers的部分内容。红框中的Accept-Language就是头部字段名,冒号后边就是
lizelu
2018/01/11
1.4K0
TCP/IP协议族(二) HTTP报文头解析
HTTP协议整理
Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html,也就是我们常说的html文档,如果服务器无法返回text/html类型数据,服务器应该返回一个406错误(Non Acceptable)
算法之名
2019/11/18
6500
HTTP协议整理
HTTP协议
该版本只有一个命令GET;没有HEADER等描述数据的信息; 服务器发送完毕,就关闭TCP连接。
木可大大
2018/07/25
4230
HTTP协议
JS魔法堂:不完全国际化&本地化手册 之 理論篇
前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已。趁着这个机会好好学习整理一下,为后面的技术选型做准备。  本篇将阐述国际化和本地化的概念,以及其中一个很重要的概念——Language tag(也叫Language code 或 Culture)。 何为国际化?  国际化我认为就是应用支持多语言和文化习俗(数字、货币、日期和字符比较算法等),而本地化则是应用能识别用户所属文化习俗自动适
^_^肥仔John
2018/01/18
8400
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。
cxuan
2020/01/17
6440
看完这篇HTTP,跟面试官扯皮就没问题了
HTTP系列-报文结构详解
值得注意的是,在起始行中,每两个部分之间用空格隔开,最后一个部分后面应该接一个换行,严格遵循ABNF语法规范。
李林LiLin
2020/12/09
1.5K0
Http常用头部整理
3. HTTP允许传输任意类型的数据对象。类型由Content-Type加以标记。
疯狂的技术宅
2019/03/28
11.2K1
Fiddler 抓包工具 - 全网最全最细教程,没有之一
Fiddler 是位于客户端和服务器端的 HTTP 代理 目前最常用的 http 抓包工具之一 功能非常强大,是 Web 调试的利器
测试小琳达
2021/10/12
5.6K0
工具篇 - HTTP协议报文结构及示例03
前言 从事性能测试必不可绕过的就是协议,对基本知识的了解也还,还是深入掌握协议的机制,都能让你在从事性能测试实施时显得更加顺手。 下面我们就HTTP协议及性能测试过程必须掌握的一些分析工具来进行分享。
苦叶子
2018/04/04
1.1K0
工具篇 - HTTP协议报文结构及示例03
【Node.js】HTTP协议、HTTP的请求报文和响应报文
HTTP 全称为超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传送协议,基于TCP的连接方式,它可以使浏览器更加高效,使网络传输减少。 HTTP协议就是用于规范客户端浏览器和服务器端以什么样的格式进行通信数据交互,作为应用层的面向对象的协议,HTTP由请求和响应构成,是一个标准的客户端服务器模型,也是一个无状态的协议。
颜颜yan_
2023/03/06
1.4K0
【Node.js】HTTP协议、HTTP的请求报文和响应报文
web开发快餐式入门指南 1.1 http
由于web应用大多数都在浏览器中进行操作,所以我们有必要先了解一下浏览器里面到底发生了什么。简而言之,当你在浏览器的地址栏中输入网址并按下回车,或者点击了网页上的某个链接时,浏览器就会按照网址给目标服务器发送请求。浏览器和服务器之间的请求遵循http协议,协议规定了所使用的格式,只有按照这种格式组织的数据才能相互识别。
ApacheCN_飞龙
2019/02/15
4470
理解Request Headers 和 Response Headers
请求头由key/value对组成,每行为一对,key和value之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息
xyzzz
2021/04/26
1.9K0
【建议收藏】看这篇就够了-关于HTTP(S)和RPC10问-网络知识第三篇
关于网络的知识,上篇分享了传输层的知识,但没有深入剖析TCP的流量控制,差错控制拥塞控制,这块后面再做个专题文章进行分享,今天我们来看下HTTP(S)协议和RPC。
公众号-利志分享
2022/06/13
5730
【建议收藏】看这篇就够了-关于HTTP(S)和RPC10问-网络知识第三篇
相关推荐
3.HTTP报文内的HTTP信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档