前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >jQuery.i18n.properties 实现 Web 前端的国际化

jQuery.i18n.properties 实现 Web 前端的国际化

作者头像
江米小枣
发布于 2020-06-15 07:10:27
发布于 2020-06-15 07:10:27
4.8K10
代码可运行
举报
文章被收录于专栏:云前端云前端
运行总次数:0
代码可运行

1、什么是国际化

国际化英文单词为:Internationalization,又称 i18n,“i”为单词的第一个字母,“18”为“i”和“n”之间单词的个数,而“n”代表这个单词的最后一个字母。

2、jQuery.i18n.properties

jQuery.i18n.properties 是一款轻量级的 jQuery 国际化插件。与 Java 里的资源文件类似,jQuery.i18n.properties 采用 .properties 文件对 JavaScript 进行国际化。jQuery.i18n.properties 插件根据用户指定的(或浏览器提供的 )语言和国家编码(符合 ISO-639 和 ISO-3166 标准)来解析对应的以“.properties”为后缀的资源文件。

3、实现原理

利用资源文件实现国际化是一种比较流行的方式。jQuery.i18n.properties 插件首先加载默认的资源文件(例如:Messages.properties),然后加载针对特定语言环境的资源文件(例如:Messages_en.properties),这就保证了在未提供某种语言的翻译时,默认值始终有效。开发人员可以以 JavaScript 变量(或函数)或 Map 的方式使用资源文件中的 key。

4、特点

  • 使用 Java 标准的 .properties 文件作为资源文件
  • 使用 ISO-639 作为语言编码标准,ISO-3166 作为国家名称编码标准
  • 按顺序加载默认资源文件和指定语言环境的资源文件,保证默认值始终可用
  • 未指定语言环境时使用浏览器提供的语言
  • 可以在资源字符串中使用占位符(例如:hello= 你好 {0}! 今天是 {1}。)
  • 资源文件中的 Key 支持命名空间(例如:com.company.msgs.hello = Hello!)
  • 支持跨行的值
  • 可以以 JavaScript 变量(或函数)或 Map 的方式使用资源文件中的 Key

5、API

jQuery.i18n.properties() 也可以这样写 ($.i18n.properties())

jQuery.i18n.prop() 也可以这样写($.i18n.prop())

jQuery.i18n.browserLang() 也可以这样写($.i18n.browserLang())

jQuery.i18n.properties

jQuery.i18n.properties() 用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 jQuery.i18n.properties({
  name:'strings',// 资源文件名称
  path:'bundle/',// 资源文件所在目录路径
  mode:'both',// 模式:变量或 Map
  language:'pt_PT',// 对应的语言
  cache:false,
  encoding: 'UTF-8',
  callback: function() {// 回调方法
  }
});

jQuery.i18n.prop(key) 用法

以 map 的方式使用资源文件中的值,其中 key 指的是资源文件中的 key。当 key 指定的值含有占位符时,可以使用 jQuery.i18n.prop(key,var1,var2 … ) 的形式,其中 var1,var2 …对各占位符依次进行替换。例如资源文件中有“msgmultiplaceholder = 今天是{0} 天... 我们去 {1}?”的键值对,则我们可以采用“jQuery.i18n.prop('msgmultiplaceholder','晴','玩耍');”的形式使用 msg_hello。

jQuery.i18n.browserLang() 用法

用于获取浏览浏览器的语言信息

demo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).ready(function() {
       loadBundles('en');
               
       $('#lang').change(function() {
           var selection = $('#lang option:selected').val();
           loadBundles(selection != 'browser' ? selection : null);
           $('#langBrowser').empty();
           if(selection == 'browser') {
               $('#langBrowser').text('('+navigator.language+')');
           }
       });
       
   });
   
   function loadBundles(lang) {
       jQuery.i18n.properties({
           name:'Messages',
           path:'bundle/',
           mode:'both',
           language:lang, //浏览器语言
           callback: function() {
               updateExamples();
           }
       });
   }
   
   function updateExamples() {       var ex1 = 'msg_hello';
       var ex2 = 'msg_complex'; var ex2P = '今天';
       var ex3 = 'msg_url'; var ex3P = '走';
       var ex5 = 'msg_multi_placeholder'; var ex5P1 = '晴'; var ex5P2 = '玩耍';
       var ex6 = 'msg_multi_placeholder_corrected'; var ex6P1 = '晴'; var ex6P2 = '玩耍';
       $('#mapExamples')
           .empty()
           .append('<li><code class="i18n">jQuery.i18n.prop(\''+ex1+'\')</code>  -->  '+jQuery.i18n.prop(ex1)+'</li>')
           .append('<li><code class="i18n">jQuery.i18n.prop(\''+ex2+'\',\''+ex2P+'\')</code>  -->  '+jQuery.i18n.prop(ex2, ex2P)+'</li>')
           .append('<li><code class="i18n">jQuery.i18n.prop(\''+ex3+'\',\''+ex3P+'\')</code>  -->  '+jQuery.i18n.prop(ex3, ex3P)+'</li>')
           .append('<li><code class="i18n">jQuery.i18n.prop(\''+ex5+'\',\''+ex5P1+'\',\''+ex5P2+'\')</code>  -->  '+jQuery.i18n.prop(ex5, ex5P1, ex5P2)+'</li>')
           .append('<li><code class="i18n">jQuery.i18n.prop(\''+ex6+'\',\''+ex6P1+'\',\''+ex6P2+'\')</code>  -->  '+jQuery.i18n.prop(ex6, ex6P1, ex6P2)+'</li>');
           
          var ex21 = 'msg_hello';
       var ex22 = 'msg_world';
       var ex23 = 'msg_complex'; var ex23P = 'John';
       var ex24 = 'inexistent_key';
       $('#varExamples')
           .empty()
           .append('<li><code class="i18n">'+ex21+'</code>  -->  '+eval(ex21)+'</li>')
           .append('<li><code class="i18n">'+ex22+'</code>  -->  '+eval(ex22)+'</li>')
           .append('<li><code class="i18n">'+ex23+'(\''+ex23P+'\')</code>  -->  '+eval(ex23+'(\''+ex23P+'\')')+'</li>')
           .append('<li><code class="i18n">'+ex24+'</code>  -->  <small><i>(browser would report a missing JS symbol)</i></small></li>');
   }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h2>jQuery.i18n.properties :: Demo</h2><div class="left">
 
<h3>例子</h3>
<div id="langBox">
     语言:
   <select id="lang">
       <option value="browser">browser</option>
       <option value="zh">中文</option>
       <option value="pt">葡萄牙文</option>
       <option value="en" selected>英文</option>
   </select>
   <span id="langBrowser"></span>
</div><h4>map</h4>
<ul id="mapExamples"></ul><h4>JS variable</h4>
<ul id="varExamples"></ul>
</div>

7、项目中的实现可能遇到的问题

a、字符长短问题。 b、度量单位问题。

8、总结

jQuery.i18n.properties 具有轻量级(压缩后仅 4kb)、简单易用等特点,但是作为一个普及度不高的轻量级插件,不一定适用于大型的或对效率要求极高的场景。

9、资料来源

  • http://www.cnblogs.com/sydeveloper/p/3729951.html
  • https://github.com/jquery-i18n-properties/jquery-i18n-properties
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云前端 微信公众号,前往查看

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

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

评论
登录后参与评论
1 条评论
热度
最新
大佬,function updateExamples(var_ ) { jQuery.i18n.prop($(this).data("locale"), var_ ) } 您这个是本地变量传入的。若需要从调用的地方传入一个变量进去 要如何传入?谢谢!
大佬,function updateExamples(var_ ) { jQuery.i18n.prop($(this).data("locale"), var_ ) } 您这个是本地变量传入的。若需要从调用的地方传入一个变量进去 要如何传入?谢谢!
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
基于jQuery.i18n.properties 实现前端页面的资源国际化
哎_小羊
2018/01/02
4K0
基于jQuery.i18n.properties 实现前端页面的资源国际化
四种方式解决页面国际化问题——步骤详解
最近在做公司的网站,但是有一个是比较麻烦的事情就是需要做的一个国际化,我们都知道后端其实做国际化的话是直接可以配置的,相对来说是比较简单的,但是前端做国际化的话是很麻烦的一件事情,但是不是说不可以做,我之前呢是准备直接做两套网站,这样一样可以实现国际化的效果,其实这也是过去网站国际化的一个做法,包括现在也有人这样做,这个办法我们就不具体的写了,因为很简单,直接一模一样的写两份,一份是中文的一份是英文的就行了!其实我没写之前看了很多的资料,关于国际化的,很多的大神提供了很多的办法,但是都不是很详细,写的很模糊,所以我查看很多资料以后决定写这篇博客,总结一下自己的想法,同时希望可以帮助很多的人解决这个问题!
何处锦绣不灰堆
2020/05/29
1.4K0
jquery/vue/react前端多语言国际化翻译方案指南
每个开发者能希望编写的程序可以让全世界的用户使用,它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换种说法,「应用程序」的功能和「代码设计」时考虑在不同地区运行的需要,其代码适应不同区域要求。开发这样的的过程,就称为国际化( internationalization),简称i18n。
Tz一号
2021/09/08
2.8K0
web项目实现国际化
2.资源文件:以.properties文件的key-value的特性,设置key和value,一般一个语种要写一个文件。
Mshu
2018/10/31
1.2K0
Spring i18n国际化
随着互联网的发展,越来越多的企业和个人开始关注全球化的需求。在这个背景下,多语言支持成为了一个重要的课题。Spring框架作为一款优秀的Java开发框架,提供了丰富的i18N支持,能帮助搬砖工快速实现多语言应用。
鱼找水需要时间
2023/06/20
3370
Spring i18n国际化
springboot-i18n国际化
In computing, internationalization and localization are means of adapting computer software to different languages, regional peculiarities and technical requirements of a target locale.
用户2146693
2019/08/08
1.3K0
springboot-i18n国际化
公司国际化笔记
国际化原因 为了更加方便切换版本,让代码应该一次完成,多国使用,除了使用英语外,还要可以进行单独语言包的一个添加,文章就是这样的一个例子. 公司接到一个国外的项目,需要法文版本的,但是公司通晓法文的基本没有,于是商量降低要求之后开始国际化采用英文展示就行,于是任务就开始了. 目录 [TOC] 需求分析 项目的代码全部国际化任务量不小,公司基本没有用什么框架,基本采用的是js,html实现数据的展示,没有采用框架,只是有一些简单的逻辑分层,加大了不少国际化的难度. 但是针对java部分的代码,虽说稍微熟悉一些
@坤的
2018/06/29
1.2K0
Spring之 国际化:i18n
国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国际化是通过配置文件来实现的,假设要支撑两种语言,那么就需要两个版本的配置文件。
叫我阿杰好了
2024/01/04
7300
Spring之 国际化:i18n
Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
JSTL(Java Standard Tag Library) –Java标准标签库。 SUN公司制定的一套标准标签库的规范。 JSTL标签库,是由一些Java类组成的。
谙忆
2021/01/21
1K0
Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
i18next-页面层语言国际化js框架介绍
    因为工作需要,最近研究了下网站语言国际化的问题,根据当前项目架构,寻求一种较好的解决方案。 首先总结下项目中语言切换实现方式大概有以下几种: 1,一种语言一套页面,如:index_CN.html,index_TN.html,index_EN.html    根据用户当前使用语言来展示对应的页面。    这种方式比较常用,也比较理想,性能不错,但是开发使用的时间就多,每个页面要多做几遍。 2,后台定义变量,根据当前语言返回对应语言信息    这种方式不好使,麻烦,页面所有静态显示文本处都需要定义变
deepcc
2018/05/16
2K0
在struts中使用国际化(i18n)
在struts中使用国际化(i18n)     i18n可以满足对系统的国际化,它的原理就是将页面上的所有标志都放到一个消息资源文件中,不同的语言要提供不同的消息资源文件,当用户登录系统是,系统就是根据你登录的语言,选择不同的消息资源文件显示出来,这样你就可以看到不同的效果了。     一、配置文件的设置     其实i18n的使用还是比较简单的,首先你要在struts-config.xml配置文件中配置消息资源文件的路径,如下所示: ------------------------------------
源哥
2018/08/28
4040
从源码看Spring的i18n·优雅的国际化实战
互联网业务出海,将已有的业务Copy to Global,并且开始对各个国家精细化,本土化的运营。对于开发人员来说,国际化很重要,在实际项目中所要承担的职责是按照客户指定的语言让服务端返回相应语言的内容。本文基于spring的国际化支持,实现国际化的开箱即用,静态文件配置刷新生效以及全局异常国际化处理。
简熵
2023/03/06
3.2K0
从源码看Spring的i18n·优雅的国际化实战
flea-common使用之本地国际化实现
本地国际化,它是指应用程序根据所处语言环境的不同【如 Java 中可用 国际化标识类 java.util.Locale 区分不同语言环境】,自动匹配应用内置的相应的语言环境下的资源配置【如 Java 中可用 资源包类 java.util.ResourceBundle 来匹配】,从而获取并对外展示相应的语言环境下的资源信息。
huazie
2024/08/14
2500
flea-common使用之本地国际化实现
Java国际化/本地化实战
开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面——这便是典型的i18n国际化问题。
JavaEdge
2020/05/27
2.4K0
Java国际化/本地化实战
如何使用Spring Boot轻松实现国际化和本地化
国际化(Internationalization) 是指为了适应不同语言、文化和地区的用户,使软件能够方便地进行本地化修改的过程。国际化(Internationalization) 简称i18n,其中 “i” 是Internationalization的首字母 ,“n” 是最后一个字母 , “18” 代表了中间省略的18个字母。
索码理
2024/02/22
3.1K1
如何使用Spring Boot轻松实现国际化和本地化
Spring-国际化信息01-基础知识
假设我们开发一个支持多国语言的Web应用系统,要求能够根据客户端系统的语言类型返回对应的界面。
小小工匠
2021/08/16
5780
SpringMVC-国际化
SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型,这个参数在请求头中,当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(LocalResolver)找到后使用它获取请求所对应的本地化类型信息,就是会找到对应类型信息的 properties 的内容给加载到页面当中进行展示
程序员NEO
2023/10/01
2090
SpringMVC-国际化
Spring-国际化信息02-MessageSource接口
spring定义了访问国际化信息的MessageSource接口,并提供了几个易用的实现类.
小小工匠
2021/08/16
1.1K0
Spring核心——MessageSource实现国际化
在上下文与IoC对ApplicationContext以及Context相关的设计模式进行了介绍。ApplicationContext作为一个Context在应用的运行层提供了IoC容器、事件、国际化等功能接口。
随风溜达的向日葵
2018/08/15
5K0
python国际化(i18n)和中英文切
Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现:
py3study
2020/01/06
1.2K0
相关推荐
基于jQuery.i18n.properties 实现前端页面的资源国际化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验