​ 写这个方法的原因是因为我们需要改版国际化,因为相同的项目有其他分支做过国际化,但是主版本没有进行过国际化,目前需要修改主版本的国际化,但是因为国际化的方式做了结构上的调整所以写了这个工具方法方便去方便修改。

下面我做一下说明

这个是目前版本的国际化方式,是按照目录模块进行的国际化,每个目录一个文件 放在对应国际化目录中,这样做其实为了方便翻译的时候进行查找和翻译,相同的变量可以更好的复用。

目录:

内容:

再看看以前的版本

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

目录:

组件的内容:

所以可以看到他们的内容是一个是有层级结构的,另外一个是做了平铺,目前我觉得平铺好一些,因为去掉前面相同的也很容易找到最后的变化的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数据的更多相关文章

  1. libgdx学习记录11——平铺地图TiledMap

    地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机Otho ...

  2. JSON平铺功能的实现(JS操作JSON数据)

    一.什么是JSON平铺 JSON平铺分成两种: 平铺的json转树结构的json 例如: { a: 'value', b: 'b1.value' } // 转换成=> { a: 'value', ...

  3. 后端接收json数据交互

    学习记录,后端接收json数据几种方式 1.直接接收或者通过HttpServletRequest接收 public void test(String userid, HttpServletReques ...

  4. 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载

    如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...

  5. 建模:通过ES平铺关系型数据库多表的数据

    问:建模要从一个限界上下文中来建模,是否可以简单的把几张表进行笛卡尔乘积方式的平铺? 答:不能,原因之一,数据量会急剧增长:原因之二,这样的平铺是毫无意义的,必须要定义一个维度,在这个维度上根据需求约 ...

  6. js对象-平铺与嵌套的互相转换

    一个json对象,包含嵌套关系,传输过来的时候是平铺的,顺序打乱,用parentCode属性来关联,如下 { "1":{ "name": "中国&qu ...

  7. QPainter绘制图片填充方式(正常大小、剪切大小、自适应大小、平铺)

    Qt中QPainter提供了绘制图像的API,极大地方便了我们对图像的绘制. Qt中提供了QPixmap, QBitmap,QBitMapQImage,QPicture等图像绘图设备,它们的类关系如下 ...

  8. Mac下的平铺式桌面 - Yabai

    Mac下的平铺式桌面 - Yabai 近来无事,凑着周末休息的时间,想折腾一下 Mac.很久之前就有朋友给我推荐过一款名为"Yabai"的平铺式桌面管理软件,今天,就折腾起来了. ...

  9. iOS UIButton 设置图片平铺

    UIImage *image2 = [UIImage imageNamed:imgName]; CGFloat top = ; // 顶端盖高度 CGFloat bottom = ; // 底端盖高度 ...

随机推荐

  1. 【并发编程】【JDK源码】CAS与synchronized

    线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同 ...

  2. 指数型生成函数 及 多项式求ln

    指数型生成函数 我们知道普通型生成函数解决的是组合问题,而指数型生成函数解决的是排列问题 对于数列\(\{a_n\}\),我们定义其指数型生成函数为 \[G(x) = a_0 + a_1x + a_2 ...

  3. Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝

    一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...

  4. MySQL安装-二进制软件包安装

    MySQL 双版本安装 安装mysql AB (RPM)    -mysql官方的RPM包  安装MySQL 5.6.19版本 安装之前需要将系统自带的关于mysql软件全部卸载掉 rpm -e (加 ...

  5. BZOJ 3192: [JLOI2013]删除物品(树状数组)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3192 题解: 首先每次一定是来回移动直到最大的到顶上. 所以我们可以将第两个堆的堆顶接起来 ...

  6. busybox(四)完善

    目录 busybox(四)完善 proc挂载 手动挂载 proc解析 使用脚本自动挂载 使用mount-a挂载 udev/mdev 挂载 使用jffs2 文件系统格式 安装zlib 安装jffs2 生 ...

  7. NLP相关问题中文本数据特征表达初探

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...

  8. Docker:dockerfile构建php项目 [八]

    一.把项目封装成docker镜像的步骤 把项目封装成docker镜像的步骤: 1.先运行一个基础容器,手动制作docker镜像 2.编写dockerfile,构建镜像 3.测试运行 二.dockerf ...

  9. 第六节:反射(几种写法、好处和弊端、利用反射实现IOC)

    一. 加载dll,读取相关信息 1. 加载程序集的三种方式 调用Assembly类下的三个方法:Load.LoadFile.LoadFrom. //1.1 Load方法:动态默认加载当前路径下的(bi ...

  10. 深入学习CSS外边距margin(重叠效果,margin传递效果,margin:auto实现块级元素水平垂直居中效果)

    前言 margin是盒模型几个属性中一个非常特殊的属性.简单举几个例子:只有margin不显示当前元素背景,只有margin可以设置为负值,margin和宽高支持auto,以及margin具有非常奇怪 ...