当前位置: 首页 > news >正文

html-css-js移动端导航栏底部固定+i18n国际化全局

需求:要做一个移动端的仿照小程序的导航栏页面操作,但是这边加上了i18n国家化,由于页面切换的时候会导致国际化失效,所以写了这篇文章

1.效果

切换页面的时候中英文也会跟着改变,不会导致切换后回到默认的语言

2.实现

首先下载插件jquery-i18n-properties

下载这个压缩后的js文件即可

这个文件还需要jquery.js的支持code.jquery.com/jquery-3.7.1.min.js

 新建jquery-3.7.1.min.js文件之后把这个网页全部复制粘贴进去就行了。 

 2.1创建i18n文件夹,并且创建language.js和不同语言文件

其中js.properties是默认语言文件,us是英语,tw是中文

主要中英文切换代码如下,写在language.js里面,用法在后面

/* 网站支持的语言种类 */
const webLanguage = ['tw', 'us']/* i18nLanguage = "tw" 设置默认繁体 */
const i18nExecute = (i18nLanguage = "tw") => {console.log(i18nLanguage, '走哪了');if ($.i18n == undefined) return false$.i18n.properties({name: "js", //资源文件名称path: '/i18n/lang/', //资源文件路径mode: 'map', //用Map的方式使用资源文件中的值language: i18nLanguage,callback: function () {/* 替换普通文本 */$("[i18n]").each(function () {$(this).html($.i18n.prop($(this).attr("i18n")))})/* 替换value属性 */$("[i18n-v]").each(function () {$(this).val($.i18n.prop($(this).attr("i18n-v")))})/* 替换placeholder属性 */$("[i18n-p]").each(function () {$(this).attr("placeholder", $.i18n.prop($(this).attr("i18n-p")))})}});
}/* 获取文本 */
const i18nProp = function (value) {if ($.i18n == undefined) return falsereturn $.i18n.prop(value)
}$(function () {i18nExecute()
})

内容如下 ,这边我写了俩个测试的中英文版

 

2.2编写页面内容

注意!!jquery.js一定要在这俩个插件的前面,不然报错

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" type="text/css" href="./pulice.css" /></head><body><div class="box"><span i18n="password"></span><button onclick="i18nToggel()">中英文切换</button><div class="tabbar"><a href="home.html" class="tab"><span>首页</span></a><a href="02.html" class="tab"><span>用户</span></a></div></div><script src="./jquery-3.2.1.min.js"></script><script src="./i18n/jquery.i18n.properties-min.js"></script><script src="./i18n/language.js"></script></body>
</html>

确实是实现了 

2.3language的完整代码如下

/* 网站支持的语言种类 */
const webLanguage = ['tw', 'us']/* i18nLanguage = "tw" 设置默认繁体 */
const i18nExecute = (i18nLanguage = "tw") => {console.log(i18nLanguage, '走哪了');if ($.i18n == undefined) return false$.i18n.properties({name: "js", //资源文件名称path: '/i18n/lang/', //资源文件路径mode: 'map', //用Map的方式使用资源文件中的值language: i18nLanguage,callback: function () {/* 替换普通文本 */$("[i18n]").each(function () {$(this).html($.i18n.prop($(this).attr("i18n")))})/* 替换value属性 */$("[i18n-v]").each(function () {$(this).val($.i18n.prop($(this).attr("i18n-v")))})/* 替换placeholder属性 */$("[i18n-p]").each(function () {$(this).attr("placeholder", $.i18n.prop($(this).attr("i18n-p")))})}});
}/* 获取文本 */
const i18nProp = function (value) {if ($.i18n == undefined) return falsereturn $.i18n.prop(value)
}// 中英文切换
let flagI18n = false;
function i18nToggel() {flagI18n = !flagI18n;console.log(flagI18n)localStorage.setItem('i18n', JSON.stringify(flagI18n))if (flagI18n) {i18nExecute('us')} else {i18nExecute('tw')}
}
let i18n = ''
// 解决刷新后数据回到默认语言问题
function query() {if (localStorage.key('i18n')) {i18n = JSON.parse(localStorage.getItem('i18n'))flagI18n = i18n;if (i18n) {console.log('ces111');i18nExecute('us')} else {console.log('ces22');i18nExecute('tw')}}}
query();
function routerHref(item) {console.log(flagI18n, '怎么搞成永久的');}

2.4底部固定导航栏的css样式如下

html,
body {width: 100%;height: 100%;
}
* {padding: 0px;margin: 0px;
}
.box {height: 100%;width: 99%;border: 1px solid red;
}
.tabbar {height: 50px;display: flex;justify-content: space-evenly;align-items: center;box-sizing: border-box;padding: 10px;background-color: #e2dfdf;width: 100%;position: fixed;z-index: 1000;left: 0;bottom: 0;
}

ps:如果是原生写的要打包成app需要后端使用nginx进行配置,并且前端不需要再写端口和域名这些,后端发的端口域名仅作为调试使用,线上直接用手机上的默认端口域名去请求就可以了请求如下

let serveUrl = '/index/login'
axios.post(serveUrl).then(res=>{})

文章到此结束希望对你有所帮助~

相关文章:

  • 羊大师讲解每天坚持去散步,你的身体将会感受到奇迹的变化!
  • 【Redux】自己动手实现redux和react-redux
  • 16.Linux Bash Shell通过`read`命令读取用户输入
  • Python3 运算符
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • x-cmd pkg | gitui - git 终端交互式命令行工具
  • 【docker】Dockerfile 指令详解
  • 华为 1+X《网络系统建设与运维(初级)》 认证实验上机模拟试题
  • 图像预处理——transforms
  • 【2023年度总结】蜕变与挑战
  • 【XR806开发板使用】开发环境搭建、Hello工程以及开发事项
  • 基于OpenCV的图像缩放
  • 大数据相关软件的安装指南(超详细的图文教程)
  • 逻辑回归简单案例分析--鸢尾花数据集
  • 【动态规划】C++算法:115.不同的子序列
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【前端学习】-粗谈选择器
  • 30天自制操作系统-2
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Octave 入门
  • Vue组件定义
  • webgl (原生)基础入门指南【一】
  • web标准化(下)
  • 闭包,sync使用细节
  • 服务器从安装到部署全过程(二)
  • 聊聊sentinel的DegradeSlot
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 在Unity中实现一个简单的消息管理器
  • 【干货分享】dos命令大全
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • (1)常见O(n^2)排序算法解析
  • (floyd+补集) poj 3275
  • (Matlab)使用竞争神经网络实现数据聚类
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)丶RabbitMQ的六大核心
  • (强烈推荐)移动端音视频从零到上手(下)
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 未来三学期想要修的课 (日記)
  • (转)http协议
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net core使用ef 6
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @RequestBody的使用
  • [2018-01-08] Python强化周的第一天
  • [30期] 我的学习方法
  • [4.9福建四校联考]
  • [AIGC codze] Kafka 的 rebalance 机制
  • [C++]:for循环for(int num : nums)