前端国际化

简介: 摘要:   国际化是指将页面显示的信息翻译成不同语言,可以根据不同语言开发多个版本,然后根据用户选择的语言显示不同的页面。但是这样需要很高的成本,而且维护起来也很麻烦,一个地方有问题就要修改所有版本。

摘要:

  国际化是指将页面显示的信息翻译成不同语言,可以根据不同语言开发多个版本,然后根据用户选择的语言显示不同的页面。但是这样需要很高的成本,而且维护起来也很麻烦,一个地方有问题就要修改所有版本。本文主要是分享一种前端国际化解决方法,并且已经应用到自己的项目中。

前端国际化需要将页面HTML、javascript的提示信息、后端返回的信息翻译成对应的语言。如果我们能够将这几个地方的内容提取出来,然后用一个翻译函数,根据不同的参数将内容翻译成不同的语言,这样就达到我们的目的了。

页面国际化:

  对于标签里的内容国际化,需要我们在页面显示出来之前就做好翻译。使用i18n插件来完成,先到官网下载插件,然后引到自己的项目中。

 1 function localize(lng){
 2     var deferred = $.i18n.init({
 3         lng         : lng || 'zh-CN',      //翻译成的语言
 4         load        : 'current',           //加载当前设置的语言包
 5         getAsync    : false,               //是否异步调用语言包
 6         cookieName  : 'i18n',              //cookie的名称
 7         preload     : ['zh-CN', 'en-US'],  //预加载语言包
 8         fallbackLng : ['zh-CN', 'en-US'],  //如果没有设置,则默认为“开发”。如果打开,所有丢失的键/值将被翻译成该语言。
 9         resGetPath  : '/locale/__lng__/__ns__.json',                          // 加载资源的路径
10         ns: { namespaces: ['test'], defaultNs: 'test'},                       //加载的语言包
11         useLocalStorage : false,                                              //是否将语言包存储在localstorage
12         localStorageExpirationTime: 86400000                                  // 有效周期,单位ms。默认1周
13     });
14     return deferred;
15 }

 对应页面内容加上data-i18n属性,如下:

1 <div class="content">
2     <h2 data-i18n="test.title">测试</h2>
3     <span data-i18n="test.content">这是一个测试</span>
4 </div>

 

en-US/test.json

1 {
2     "test": {
3         "title": "test",
4         "content": "this is a test"
5     }
6 }

zh-CN/test.json

1 {
2     "test": {
3         "title": "测试",
4         "content": "这是一个测试"
5     }
6 }

对应js

1 localize().done(function(){ $('div.content').i18n();});

javascript文件和后台返回信息的国际化:

  我们只需要将内容信息提取到一个JSON或者js文件,然后将其转换成英文,如下:

i18n.message = {

    "success" : "成功",

    "fail" : "失败"

};

然后在js文件中,直接替换"成功"-->i18n.message.success,也可以定义一个通用函数来做翻译

1 locale.curryGetMsg = function(ns, cl){
2     return (cl = chopper.locale)[ns] ?
3     function(msg){
4         return cl[ns][msg] || cl.action[msg] || cl.common[msg] || cl.message[msg] || msg;
5     } :
6     function(msg){
7         return cl.action[msg] || cl.common[msg] || cl.message[msg] || msg;
8     };
9 };

在项目中只需要调用这个函数,如下:

1 var test = locale.curryGetMsg("module");// module为对应的模块
2 
3 test.("success");

 

下面是一个i18n例子:

文件结构为

i18n-->

    ​    ​index.html

    ​    ​i18next-latest.js

    ​    ​locale-->

    ​    ​    ​    ​en-US-->

    ​    ​    ​    ​    ​    ​test.json

    ​    ​    ​    ​zh-CN-->

    ​    ​    ​    ​    ​    ​test.json

代码:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 5         <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
 6         <script src="./i18next-latest.js"></script>
 7     </head>
 8     <body>
 9         <div class="content">
10             <h2 data-i18n="test.title">测试</h2>
11             <span data-i18n="test.content">这是一个测试</span>
12         </div>
13         <script>
14         function localize(lng){
15             var deferred = $.i18n.init({
16                 lng         : lng || 'zh-CN',      //翻译成的语言
17                 load        : 'current',           //加载当前设置的语言包
18                 getAsync    : false,               //是否异步调用语言包
19                 cookieName  : 'i18n',      //cookie的名称
20                 preload     : ['zh-CN', 'en-US'],  //预加载语言包
21                 fallbackLng : ['zh-CN', 'en-US'],  //如果没有设置,则默认为“开发”。如果打开,所有丢失的键/值将被翻译成该语言。
22                 resGetPath  : './locale/__lng__/__ns__.json', // 加载资源的路径
23                 ns: { namespaces: ['test'], defaultNs: 'test'},             //加载的语言包
24                 useLocalStorage : false,                                              //是否将语言包存储在localstorage
25                 localStorageExpirationTime: 86400000                                  // 有效周期,单位ms。默认1周
26             });
27             return deferred;
28         }
29         localize('en-US').done(function(){ $('div.content').i18n();});
30         </script>
31     </body>
32 </html>

 注意:上面的例子需要在服务环境上运行!

相关文章
|
开发框架 自然语言处理 前端开发
循序渐进VUE+Element 前端应用开发(9)--- 界面语言国际化的处理
循序渐进VUE+Element 前端应用开发(9)--- 界面语言国际化的处理
|
自然语言处理 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
【4月更文挑战第30天】Flutter支持国际化与本地化,借助`Intl`包和`Localizations`类,帮助开发者实现多语言应用。`Intl`提供日期、时间格式化,而`Localizations`管理不同语言环境的资源。在`pubspec.yaml`添加`intl`依赖,创建本地化资源文件并定义`LocalizationsDelegate`。通过`Localizations.of()`获取本地化资源,实现应用适应不同语言环境。
491 0
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
|
资源调度 前端开发
前端项目实战叁拾-​react-admin+material ui-页面配置国际化
前端项目实战叁拾-​react-admin+material ui-页面配置国际化
158 0
前端项目实战叁拾-​react-admin+material ui-页面配置国际化
|
前端开发 JavaScript 测试技术
前端国际化辅助工具——自动替换中文并翻译
前端国际化辅助工具——自动替换中文并翻译
934 0
|
XML 存储 JSON
前端国际化和本地化的实现方法
前端国际化和本地化的实现方法
895 0
|
前端开发
前端项目实战223-ant design国际化配置
前端项目实战223-ant design国际化配置
160 0
|
XML JSON 自然语言处理
「BBFE前端团队」以生产消费模式设计国际化方案
「BBFE前端团队」以生产消费模式设计国际化方案
326 0
|
JSON 自然语言处理 JavaScript
Ant-design-vue+vue-i18n实现前端国际化
Ant-design-vue+vue-i18n实现前端国际化
791 0
Ant-design-vue+vue-i18n实现前端国际化
|
JSON 自然语言处理 JavaScript
Ant-design-vue + vue-i18n实现前端国际化
Ant-design-vue + vue-i18n实现前端国际化
498 0

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 3
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    447
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    167
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    179
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    138
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    227
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    317
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    148
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    80
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    145
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    197
  • 下一篇
    oss云网关配置