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”.支持自定义排版.插图.建立相 ...
随机推荐
- 算法(Algorithms)第4版 练习 1.5.13
package com.qiusongde; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; pu ...
- Hessian 序列化和反序列化实现
先聊聊 Java的序列化,Java官方的序列化和反序列化的实现被太多人吐槽,这得归于Java官方序列化实现的方式. 1.Java序列化的性能经常被吐槽.2.Java官方的序列化后的数据相对于一些优秀的 ...
- BZOJ2034 [2009国家集训队]最大收益
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- codeforces 707D:Persistent Bookcase
Description Recently in school Alina has learned what are the persistent data structures: they are d ...
- shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性
shingling算法用于计算两个文档的相似度,例如,用于网页去重.维基百科对w-shingling的定义如下: In natural language processing a w-shinglin ...
- jQuery Cloud Zoom:图片放大镜插件 破解插件
/* Cloud Zoom 10 Site License (CZ01-10). Version 3.1 rev 1312051822 */ (function(e) { function s(a) ...
- 如何实现1080P延迟低于500ms的实时超清直播传输技术
再来当一次技术搬运工,内容来自高可用框架,学霸君工程师袁荣喜的如何实现1080P延迟低于500ms的实时超清直播传输技术. 导语:视频直播是很多技术团队及架构师关注的问题,在实时性方面,大部分直播是准 ...
- 音频压缩(Speex使用&Opus简介)--转
博客地址:http://blog.csdn.net/kevindgk GitHub地址:https://github.com/KevinDGK/MyAudioDemo 一简介 二局域网语音配置 三Sp ...
- python密钥登录主机
#!/usr/bin/python # -*- coding:utf-8 -*- ################################### # # 检查主机的损坏磁盘 # ####### ...
- [BZOJ2806][CTSC2012]熟悉的文章(Cheat)
bzoj luogu 题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么 ...