一次国际化记录以及平铺JSON数据
写这个方法的原因是因为我们需要改版国际化,因为相同的项目有其他分支做过国际化,但是主版本没有进行过国际化,目前需要修改主版本的国际化,但是因为国际化的方式做了结构上的调整所以写了这个工具方法方便去方便修改。
下面我做一下说明
这个是目前版本的国际化方式,是按照目录模块进行的国际化,每个目录一个文件 放在对应国际化目录中,这样做其实为了方便翻译的时候进行查找和翻译,相同的变量可以更好的复用。
目录:

内容:

再看看以前的版本
以前版本也是按照模块去划分的,但是区别是每个组件的文件都做了一次翻译,这样做的好处很明显,扁平化查找翻译文件很方便,因为对应翻译的组件名称就是当前组件的名称。
目录:

组件的内容:

所以可以看到他们的内容是一个是有层级结构的,另外一个是做了平铺,目前我觉得平铺好一些,因为去掉前面相同的也很容易找到最后的变化的key。
So我写了一个从有层级结构的json转换成平铺json的函数。
const a = {
TITLE: '基本设置',
FIELD_TITLE: {
BASIC_INFO: '基本信息',
APP_IMAGE: '标题栏图片',
SPACE_LOGO: '空间logo'
},
TIP_MSG: {
APP_IMAGE: '上传图片定制App中的标题栏显示',
APP_INSIDE_PREVIEW: 'App内效果预览',
PREVIEW: '预览',
SPACE_LOGO: '上传图片定制App中的空间logo显示'
},
DESCRIPTION: {
APP_IMAGE: '请选择背景透明或白色的jpg, jpeg, 或png文件',
SPACE_LOGO: '请选择jpg, jpeg, 或png文件',
}
}
function parseJSON (obj, parent) {
if (typeof obj === 'string') {
return obj
}
const keys = Object.keys(obj)
const isKeys = keys.length
if (!isKeys) {
return obj
}
let json = {}
keys.forEach((value) => {
const newParent = `${parent ? `${parent}.` : ''}${value.toLowerCase()}`
const k = typeof obj[value] === 'string' ? null : Object.keys(obj[value])
if (k) {
json = {
...json,
...parseJSON(obj[value], newParent)
}
} else {
json[newParent] = obj[value]
}
})
return json
}
console.log('------- ', JSON.stringify(parseJSON(a, 'space')))
这里可以看到结果,并且支持任何深的层级
{
"space.title": "基本设置",
"space.field_title.basic_info": "基本信息",
"space.field_title.app_image": "标题栏图片",
"space.field_title.space_logo": "空间logo",
"space.tip_msg.app_image": "上传图片定制App中的标题栏显示",
"space.tip_msg.app_inside_preview": "App内效果预览",
"space.tip_msg.preview": "预览",
"space.tip_msg.space_logo": "上传图片定制App中的空间logo显示",
"space.description.app_image": "请选择背景透明或白色的jpg, jpeg, 或png文件",
"space.description.space_logo": "请选择jpg, jpeg, 或png文件"
}
在编写程序的过程中,可以自己编写一些小工具去方便的处理相同的事情,我觉得这是我们学编程、学做程序的意义,类似于归类,处理相同事务,这样我们的生活会更美好 O(∩_∩)O哈哈~
我觉得写写文字也挺好的,写的写的就可以总结一些更深刻的道理。
一次国际化记录以及平铺JSON数据的更多相关文章
- libgdx学习记录11——平铺地图TiledMap
地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机Otho ...
- JSON平铺功能的实现(JS操作JSON数据)
一.什么是JSON平铺 JSON平铺分成两种: 平铺的json转树结构的json 例如: { a: 'value', b: 'b1.value' } // 转换成=> { a: 'value', ...
- 后端接收json数据交互
学习记录,后端接收json数据几种方式 1.直接接收或者通过HttpServletRequest接收 public void test(String userid, HttpServletReques ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- 建模:通过ES平铺关系型数据库多表的数据
问:建模要从一个限界上下文中来建模,是否可以简单的把几张表进行笛卡尔乘积方式的平铺? 答:不能,原因之一,数据量会急剧增长:原因之二,这样的平铺是毫无意义的,必须要定义一个维度,在这个维度上根据需求约 ...
- js对象-平铺与嵌套的互相转换
一个json对象,包含嵌套关系,传输过来的时候是平铺的,顺序打乱,用parentCode属性来关联,如下 { "1":{ "name": "中国&qu ...
- QPainter绘制图片填充方式(正常大小、剪切大小、自适应大小、平铺)
Qt中QPainter提供了绘制图像的API,极大地方便了我们对图像的绘制. Qt中提供了QPixmap, QBitmap,QBitMapQImage,QPicture等图像绘图设备,它们的类关系如下 ...
- Mac下的平铺式桌面 - Yabai
Mac下的平铺式桌面 - Yabai 近来无事,凑着周末休息的时间,想折腾一下 Mac.很久之前就有朋友给我推荐过一款名为"Yabai"的平铺式桌面管理软件,今天,就折腾起来了. ...
- iOS UIButton 设置图片平铺
UIImage *image2 = [UIImage imageNamed:imgName]; CGFloat top = ; // 顶端盖高度 CGFloat bottom = ; // 底端盖高度 ...
随机推荐
- 求一个数组中重复数字的个数,要求复杂度为O(n)
给出代码 #include <stdio.h> #include <unistd.h> #include <iostream> #include <memor ...
- jmeter笔记(1)--原理,下载与安装
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文 ...
- consul kv使用介绍
有两种方法与Consul K/V交互的方式 HTTP API Consul KV CLI WEB访问 命令行使用 帮助命令:consul kv --help 列出所有kv:consul kv get ...
- 网页三剑客之JS
1.javascrapt介绍 js概述 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释 ...
- EF CodeFirst系列(8)--- FluentApi配置单个实体
我们已经知道了在OnModelCreating()方法中可以通过FluentApi对所有的实体类进行配置,然而当实体类很多时,我们把所有的配置都放在OnModelCreating()方法中很难维护.E ...
- 为Nexus配置阿里云代理仓库
Nexus默认远程仓库为https://repo1.maven.org/maven2/ 慢死,还常连不上. 可以添加阿里云代理仓库 URL:http://maven.aliyun.com/nexus/ ...
- 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)
Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...
- 第六节:WebApi的部署方式(自托管)
一. 简单说明 开篇就介绍过WebApi和MVC相比,其中优势之一就是WebApi可以不依赖于IIS部署,可以自托管,当然这里指的是 .Net FrameWork 下的 WebApi 和 MVC 相比 ...
- 第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验
一. 简介 1. 背景 传统的基于Session的校验存在诸多问题,比如:Session过期.服务器开销过大.不能分布式部署.不适合前后端分离的项目. 传统的基于Token的校验需要存储Key-Val ...
- ArcGis安装失败提示“需要Microsoft .NET Framework 3.5 sp1或等效环境”的解决方法
这个问题一般出现在Win8或者Win10系统上,因为系统默认没有启用该.Net Framework. 下载Microsoft .NET Framework 3.5 sp1安装后再开始安装ArcGis. ...