国家识别规范与域名方式详解:BCP47协议与语言标签应用

2.1.1 规格

国家识别规范与域名方式详解:BCP47协议与语言标签应用

在介绍例子之前,我们先了解一下国家识别中已知的规范。

语言名称用于指示当前请求对应的语言版本,遵循BCP47协议规定的标签。 (在线验证:)

规范规定:Tag的第一部分代表语言,全部小写,第二部分代表地区,全部大写。中间用破折号分隔。

下面列出了几种常用的缩写规范标签:

2.1.2 Domain(域名)法

该方法使用客户端请求的域名。如果支持对应域名下的语言,则识别成功。

这里的域名是header中发送的主机请求,在PHP中通过$_SERVER['SERVER_NAME']获取。

例如,如果我们浏览网站:

首页,看浏览器发送的请求(以Windows下的Firefox浏览器为例),

上图可以看到,header中的host就是当前的域名,所以我们可以通过以下步骤来识别:

1、后端配置当前域名与国家版本的对应关系。

2、在服务器端的PHP程序中,通过$_SERVER['SERVER_NAME']获取header中的host。

3、根据第一步的对应关系找到匹配的国家版本(地区),通过locale对应关系找到语言。

2.1.3

URL & Cookie 方法

该方法的原理如下:

1) 网址法

该方法通过传递URL中的语言参数来确定国家版本。

应用场景就像访问埃及国家域名,你查看的默认语言是阿拉伯语。如果想使用其他语言浏览埃及域名下的页面(如英语),则需要使用URL方式。

例如我们浏览URL:。

url方法中传递的国家语言信息的优先级高于host方法等其他方法,为最高优先级。

2)COOKIE方法

版本由请求页面传递的 cookie 信息(区域设置)来标识。

这种方式是客户端第一次浏览页面后,服务器通过host方法确认国家语言版本后,会在客户端设置一个cookie。接下来的浏览请求发送的http header中将会包含cookie信息。

下面的例子介绍了cookie方法的流程:

首次访问时通过host方法识别出国家语言信息后,http Response header如下:

如上图所示,第一次请求后,客户端的cookie将被设置为ar-EG。

那么客户端发送的请求头就会包含cookie。

服务器端的识别过程如下:

1.获取请求中的cookie。如果有国家语言信息,请按以下步骤操作

2、判断获取到的国家语言信息当前是否支持。如果支持,请返回该语言的版本。如果不支持,请使用默认语言版本。

2.1.4 IP方式

我们知道IP可以用来识别网络上的主机。而且IP地址段的划分是有规律的,每个国家都有不同的地址段。

然后我们就可以获取客户端的IP地址,通过IP地址库识别国家和地区,并根据国家设置语言。

该方法的识别过程如下:

1.获取请求客户端的ip

2.根据IP确定国家,并使用该国家的默认语言(以及其他识别特定语言的方法,例如accept_lanuage明确指示请求语言,可以先显示)并回显给客户端。

2.1.5 Accept_language方法

“Accept_language”是为 RFC2616 HTTP/1.1 第 14.4 节定义的可选 HTTP 标头,通常用于声明代表用户接收的语言首选项。

当客户端发出请求时,将发送默认的accept_language。服务器将获取该值,如果支持,则返回语言版本。

该方法的识别过程如下:

1.获取请求客户端的Accept_language

2、判断获取到的国家语言信息当前是否支持。如果支持,请返回该语言的版本。如果不支持,请使用默认语言版本。

这种方法的一个缺点是它取决于用户使用的浏览器版本。

例如:如果浏览器使用的是中文版火狐,那么发送 header 请求时会自动添加。

接受语言 zh-cn。

下图为中文版Firefox的请求。如果用户拥有多个语言版本的浏览器,则不同版本的浏览器中会出现不同的语言。 (例如:在中文版Firefox中浏览显示中文界面,而在英文版Firefox中浏览则显示英文界面)

这种情况更有可能发生在双语国家。开发过程中,您可以根据自己的需要灵活设置,将该识别方法的优先级设置为较低(优先级详情见下文)。

2.1.6 优先级

也许你会问,我发送header请求的时候,同时有host、cookie、url、accept_language、ip地址。

那么最终通过什么方法来确认客户要求的国家语言呢?

然后你需要设置每个方法的优先级。国际化认可的一般顺序如下:

1) 网址法

2)COOKIE方法

3)域模式

4)Accept_language方法

5)IP方式

那么为什么要选择上述优先级呢?

url方法属于用户显式切换语言的情况,肯定需要最高优先级。作为第二个cookie,可以减少识别逻辑,让识别更容易。复杂的识别逻辑仅在客户端第一次请求时使用。

当然,您可以根据自己的需求确定优先顺序。

3 结论

这些方法可以在大型Web程序的开发中灵活运用,识别国家语言信息,进而开发支持多种语言的Web应用。

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

55阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

46阅读

php一句话木马,一句话木马ctf

2026年10月05日

49阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

51阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

49阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

44阅读