I18N的前后端实现
所需工具:
1、Vue https://cn.vuejs.org/
2、Vue-I18N https://www.npmjs.com/package/vue-i18n
PS:这种方法由于使用到了Vue,所以部分Vue使用教程就不说了,请参考其他文章。
前期设置
1、构建两个JSON语言字典,如果就中英文切换就分别构建 string_en.json 和string_zh.json,格式如下:

2、读取前一步骤创建的字典,并构造VueI18n元素
//获取本地语言包
//异步获取会没有response,需要暂时关闭异步
$.ajaxSettings.async = false;
var dictions = {
en: $.getJSON('/Scripts/i18n/languages/string_en.json').responseJSON,
zh: $.getJSON('/Scripts/i18n/languages/string_zh.json').responseJSON
}
$.ajaxSettings.async = true;
//如果当前Cookie中没有语言记录,默认为中文
if ($.cookie('language') == null) {
$.cookie('language', 'zh', { expires: 7, path: '/' });
language = "zh";
}
else {
language = $.cookie('language');
}
i18n = new VueI18n({
locale: language, // 设置语言
messages: dictions, // 设置字典
})
可以看到我们会根据名为“language”的cookie来获取、设置当前语言类型。
PS:原理上,javascript是所有IO都是非阻塞式的,所以我这边需要将getJson关闭异步,不知道有没有更优化的,希望指出。
3、将构造号的VueI18n元素绑定到Vue中,构造Vue元素。
vm = new Vue({
i18n: i18n,
data() {
return {
ReloadFlag: true
}
}
}).$mount('#app_vue');
PS:2/3步骤中构造的vm和i18n都需要设置为全局变量,这样子后续js文件可以使用到
4、设置语言切换方法
i18n.locale = (i18n.locale == "en" ? "zh" : "en");
$.cookie(parameter.language, i18n.locale, { expires: 7, path: '/' });
location.reload();
通过步骤2可以看到,我们语言类型是通过cookie来控制的,那么我们只需要切换cookie并刷新页面即可
页面构建
页面构建可以分为以下几类:
1、静态内容
如果是页面静态内容需要做I18N,这只需要将原本内容替换成以下格式即可
原本页面:
<h3>
条
</h3>
修改页面
<h3>
{{$t("Units.Strip")}}
</h3>
其中的Unite.Strip就是我们一开始设置的语言字典中的内容
2、元素属性
如果我们要修改页面中的元素属性,例如placeholder属性,则需要进行以下修改
原本页面
<input type="text" name="name" placeholder="条" value="" />
修改界面
<input type="text" name="name" :placeholder="$t('Units.Strip')" value="" />
3、js中使用
如果需要在json中使用,例如alert输出,则进行以下替换
原本页面
alert("你好")
修改页面
alter( i18n.messages[i18n.locale].SweetAlert['Hello'])
4、bootstrap-table语言
引用以下语言包即可
/**
* Bootstrap Table Chinese translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$(function () {
$.fn.bootstrapTable.locales[i18n.locale] = {
formatLoadingMessage: function () {
if (i18n.locale == "zh")
return '正在努力地加载数据中,请稍候……';
else
return 'Loading, please wait...';
},
formatRecordsPerPage: function (pageNumber) {
if (i18n.locale == "zh")
return '每页显示 ' + pageNumber + ' 条记录';
else
return pageNumber + ' rows per page';
},
formatShowingRows: function (pageFrom, pageTo, totalRows) {
if (i18n.locale == "zh")
return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录';
else
return 'Showing ' + pageFrom + ' to ' + pageTo + ' of ' + totalRows + ' rows';
},
formatSearch: function () {
if (i18n.locale == "zh")
return '搜索';
else
return 'Search';
},
formatNoMatches: function () {
if (i18n.locale == "zh")
return '没有找到匹配的记录';
else
return 'No matching records found';
},
formatPaginationSwitch: function () {
if (i18n.locale == "zh")
return '隐藏/显示分页';
else
return 'Hide/Show pagination';
},
formatRefresh: function () {
if (i18n.locale == "zh")
return '刷新';
else
return 'Refresh';
},
formatToggle: function () {
if (i18n.locale == "zh")
return '切换';
else
return 'Toggle';
},
formatColumns: function () {
if (i18n.locale == "zh")
return '列';
else
return 'Columns';
},
formatExport: function () {
if (i18n.locale == "zh")
return '导出数据';
else
return 'Export data'; },
formatClearFilters: function () {
if (i18n.locale == "zh")
return '清空过滤';
else
return 'Clear filters';
}
}; $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales[i18n.locale]); });
使用要点/常见错误
1、Vue挂载节点内部不可以有style和scripts标签
2、Vue构造的js和页面的js引用顺序,确保Vue的构造js优先调用
PS:我想写.net core
I18N的前后端实现的更多相关文章
- 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi
一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...
- [开源] angularjs + Asp.net 前后端分离解决方案
本文版权归 博客园 萧秦 所有,此处为技术收藏,如有再转,请于篇头明显位置标明原创作者及出处,以示尊重! 作者:萧秦 原文:http://www.cnblogs.com/xqin/p/4862849. ...
- 前后端登录注册之node剖析与token的使用状态
登录模块功能详解 1.用户名密码的格式验证 由前端完成,根据需求自行决定,不加叙述 2.点击提交按钮思路详解 前端将用户名 以及加密后的密码还有验证码输入的内容统一发给后端 由后端和数据库的数据进行 ...
- vue-element-admin改造接入后台,搭建有来商城youlai-mall前后端分离管理平台
一. 前言 本篇基于有来商城youlai-mall微服务项目搭建的后台前端管理平台,技术选型Vue+Element-UI实现前后端分离,解决方案选型vue-element-admin.希望通过本篇你可 ...
- Vue学习笔记-基于CDN引入方式简单前后端分离项目学习(Vue+Element+Axios)
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
- Docker 部署前后端项目
Docker 部署前后端项目 平生不会相思,才会相思,便害相思. 简介:都是被逼的,从零开始一个Docker 部署九个微服务和三个前端项目.其中,这些服务需要用到Nacos.MySQL.Nginx.E ...
- 对抗假人 —— 前后端结合的 WAF
前言 之前介绍了一些前后端结合的中间人攻击方案.由于 Web 程序的特殊性,前端脚本的参与能大幅弥补后端的不足,从而达到传统难以实现的效果. 攻防本为一体,既然能用于攻击,类似的思路同样也可用于防御. ...
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
- 快速web开发中的前后端框架选型最佳实践
这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...
随机推荐
- Ogre场景编辑器Ogitor源代码的构建
本文转自:http://blog.csdn.net/zhengkangchen/article/details/6000769 Ogitor-0.4.2源代码构建,不少时间,这里记录一下: 下载源代码 ...
- PE.微PE
1.老毛桃,大白菜(20180227) ZC:我记得以前 "老毛桃"."大白菜" 之前的版本,在安装好系统之后,是没有捆绑软件的,.现在,老毛桃 安装完系统之后 ...
- CDH- 测试mr
cdh的mr样例算法的jar包在 [zc.lee@ip---- hadoop-0.20-mapreduce]$ pwd /opt/cloudera/parcels/CDH--.cdh5./lib/ha ...
- 在eclipse中引入jquery.js文件报错的解决方案
从官方下载的jquery.js在myeclipse始终用个大大的红叉,看着很不爽,如何解决呢:jquery.js在myeclipse中报错:jquery.js -> 鼠标右键 -> MyE ...
- SQL2005 2008配置错误,无法识别的配置节 system.serviceModel machine.config配置文件有问题
当装上2008的时候,你以前的程序突然报出你的machine.config配置文件有问题,比如 “/” 应用程序中的服务器错误. 配置错误 说明 : 在处理向该请求提供服务所需的配置文件时出错.请检查 ...
- Guid 使用记录
Guid 使用记录; Guid 数据不能设为null 用 00000000-0000-0000-0000-000000000000 代替默认值. 实体新建时,可以赋值为 Guid.Empty 也就是 ...
- Queue 输出数据
坑人的引用类型....输出看看结果是什么 Queue<ParaInfo> strStranList = new Queue<ParaInfo>(); StringBuilder ...
- stl_iterator.h
stl_iterator.h // Filename: stl_iterator.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...
- stl_map.h
stl_map.h // Filename: stl_map.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://blo ...
- Java自定义分页标签的实现
主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...