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

下面我做一下说明

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

目录:

内容:

再看看以前的版本

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

目录:

组件的内容:

所以可以看到他们的内容是一个是有层级结构的,另外一个是做了平铺,目前我觉得平铺好一些,因为去掉前面相同的也很容易找到最后的变化的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. rt-thread 之网络组件

    @2019-02-23 [小记] 文件 <net_sockets.c> 为兼容标准 BSD Socket API 文件 <sal_socket.c> 为网络中间抽象层 文件 & ...

  2. 第三十九篇-RecyclerView的使用

    RecyclerView介绍 RecyclerView的出现可以替代ListView,并且比ListView更高级且更具灵活性.如果有数据集合,其中的元素将因用户操作或网络事件而在运行时发生改变,请使 ...

  3. input输入框自动获取焦点

    只要在该input标签后添加autofocus="autofocus"即可 代码实例: <html> <head></head> <bod ...

  4. Python的设计模式

    设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情 ...

  5. Elasticsearch-基础介绍及索引原理分析(转载)

    最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elastic ...

  6. [物理学与PDEs]第5章习题6 各向同性材料时强椭圆性条件的等价条件

    在线性弹性时, 证明各向同性材料, 强椭圆性条件 (5. 6) 等价于 Lam\'e 常数满足 $$\bex \mu>0,\quad \lm+2\mu>0.  \eex$$ 证明: (1) ...

  7. 学习WPF

    http://www.cnblogs.com/prism/archive/2010/07/21/1781855.html 如何在WPF中画三角,以及把按钮设置成颜色渐变的样式:

  8. 2.9 while循环

    while循环 <1>while循环的格式 while 条件: 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 ...(省略)... demo i = 0 whil ...

  9. Coursera, Big Data 1, Introduction (week 3)

    什么是分布式文件系统?为什么需要分布式文件系统? 如果文件系统可以管理用网络连接的很多个存储单元,叫分布式文件系统. 分布式文件系统提供了数据可扩展性,容错性,高并发. 这些是传统文件系统不具有的. ...

  10. sort与uniq命令详解

    1.sort的作用 (排序) sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出. 如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行 ...