uniapp要通过json文件做多语言翻译,后台表示可以通过后台给我配置出我需要的翻译,我本地配置了四个语言文件,现在需要把这四个文件以下面这种格式传给后台
line:[
{
index: 'key.keys.key',//json翻译的key值,这边分了三级
chinese: '你好', //json翻译文件的中文值
english: 'Hello', //英语
spanish: 'Hola', //西语
catalunya: 'Hola', //加泰罗尼亚语
}
]
我的json文件是这样的
//中文zh.josn文件
{
key:{
keys:{
key:'你好'
}
}
}
//西班牙语的es.json 文件
{
key:{
keys:{
key:'Hello'
}
}
}
//英语的en.json文件
{
key:{
keys:{
key:'Hola'
}
}
}
//加语的ca.json文件
{
key:{
keys:{
key:'Hola'
}
}
}
我要做的是拆分我的json文件,下面是我的方法,大家有更好的方法可以使用自己的。
<script>
import zhjson from '@/i18n/zh.json'
import esjson from '@/i18n/es.json'
import enjson from '@/i18n/en.json'
import cajson from '@/i18n/ca.json'
export default {
data() {
return {
url: 'xxx.xxx'//后台地址
}
},
methods: {
// 上传本地数据
updata(){
let _this = this;
let line = [];
let keys = Object.keys(zhjson);
//这里获取了对象名开始循环
keys.forEach(item =>{
if(typeof zhjson[item] == 'string'){
let arr = {
index: item,
chinese : zhjson[item],
english: enjson[item],
spanish: esjson[item],
catalunya: cajson[item],
}
line.push(arr)
}else if(typeof zhjson[item] == 'object'){
let keystwo = Object.keys(zhjson[item]);
keystwo.forEach(items =>{
if(typeof zhjson[item][items] == 'string'){
let arr = {
index: item+ '.' + items,
chinese : zhjson[item][items],
english: enjson[item][items],
spanish: esjson[item][items],
catalunya: esjson[item][items],
}
line.push(arr)
}else if(typeof zhjson[item][items] == 'object'){
let keythree = Object.keys(zhjson[item][items]);
keythree.forEach(itemthree =>{
if(typeof zhjson[item][items][itemthree] == 'string'){
let arr = {
index: item+ '.' + items+ '.' + itemthree,
chinese : zhjson[item][items][itemthree],
english: enjson[item][items][itemthree],
spanish: esjson[item][items][itemthree],
catalunya: esjson[item][items][itemthree],
}
line.push(arr)
}else {
return
}
})
}
})
}
})
console.log('line',line)
// 这里是我上传到后台的接口
this._post('uniapp/batch_upload',{
program: '项目名',
client: '项目分类',
line: line,
},result => {
})
},
// 生成本地json文件
dataGenerate(){
let _this = this;
let line = [];
console.log('jiekou')
_this._post('uniapp/batch_download',{
program: '项目名',
client: '项目分类',
line: line,
},result => {
//将拿到的数据进行拆分,组合成新的json文件
_this.Generatejosn(result.data.line)
})
},
// 生成json文件
Generatejosn(data){
var zhjsonlist = {},
enjsonlist = {},
esjsonlist = {},
cajsonlist = {};
data.forEach(item => {
let strArr = item.index.split('.')
if(strArr.length == 1){
this.$set(zhjsonlist, strArr[0], item.chinese);
this.$set(enjsonlist, strArr[0], item.english);
this.$set(esjsonlist, strArr[0], item.spanish);
this.$set(cajsonlist, strArr[0], item.catalunya);
}else if(strArr.length == 2){
if(zhjsonlist.hasOwnProperty(strArr[0])){
this.$set(zhjsonlist[strArr[0]], strArr[1], item.chinese);
this.$set(enjsonlist[strArr[0]], strArr[1], item.english);
this.$set(esjsonlist[strArr[0]], strArr[1], item.spanish);
this.$set(cajsonlist[strArr[0]], strArr[1], item.catalunya);
}else{
this.$set(zhjsonlist, strArr[0], {});
this.$set(enjsonlist, strArr[0], {});
this.$set(esjsonlist, strArr[0], {});
this.$set(cajsonlist, strArr[0], {});
this.$set(zhjsonlist[strArr[0]], strArr[1], item.chinese);
this.$set(enjsonlist[strArr[0]], strArr[1], item.english);
this.$set(esjsonlist[strArr[0]], strArr[1], item.spanish);
this.$set(cajsonlist[strArr[0]], strArr[1], item.catalunya);
}
}else if(strArr.length == 3){
if(zhjsonlist.hasOwnProperty(strArr[0])){
if(zhjsonlist[strArr[0]].hasOwnProperty(strArr[1])){
this.$set(zhjsonlist[strArr[0]][strArr[1]], strArr[2], item.chinese);
this.$set(enjsonlist[strArr[0]][strArr[1]], strArr[2], item.english);
this.$set(esjsonlist[strArr[0]][strArr[1]], strArr[2], item.spanish);
this.$set(cajsonlist[strArr[0]][strArr[1]], strArr[2], item.catalunya);
}else{
this.$set(zhjsonlist[strArr[0]], strArr[1], {});
this.$set(enjsonlist[strArr[0]], strArr[1], {});
this.$set(esjsonlist[strArr[0]], strArr[1], {});
this.$set(cajsonlist[strArr[0]], strArr[1], {});
this.$set(zhjsonlist[strArr[0]][strArr[1]], strArr[2], item.chinese);
this.$set(enjsonlist[strArr[0]][strArr[1]], strArr[2], item.english);
this.$set(esjsonlist[strArr[0]][strArr[1]], strArr[2], item.spanish);
this.$set(cajsonlist[strArr[0]][strArr[1]], strArr[2], item.catalunya);
}
}else{
this.$set(zhjsonlist, strArr[0], {});
this.$set(enjsonlist, strArr[0], {});
this.$set(esjsonlist, strArr[0], {});
this.$set(cajsonlist, strArr[0], {});
this.$set(zhjsonlist[strArr[0]], strArr[1], {});
this.$set(enjsonlist[strArr[0]], strArr[1], {});
this.$set(esjsonlist[strArr[0]], strArr[1], {});
this.$set(cajsonlist[strArr[0]], strArr[1], {});
this.$set(zhjsonlist[strArr[0]][strArr[1]], strArr[2], item.chinese);
this.$set(enjsonlist[strArr[0]][strArr[1]], strArr[2], item.english);
this.$set(esjsonlist[strArr[0]][strArr[1]], strArr[2], item.spanish);
this.$set(cajsonlist[strArr[0]][strArr[1]], strArr[2], item.catalunya);
}
}
})
//因为我要生成四个json文件,同时生成会导致只能生成一个,具体原因可能是销毁那部分的原因我也没研究,直接做了处理,让文件一个个生成
let down = (i) =>{
if(i == 0){
var js = JSON.stringify(zhjsonlist);
}else if (i == 1){
var js = JSON.stringify(enjsonlist);
}else if (i == 2){
var js = JSON.stringify(esjsonlist);
}else if (i == 3){
var js = JSON.stringify(cajsonlist);
}
//创建一个文本blob对象
var blob = new Blob([js],{type:'application/json'})
//构造下载连接
const url = URL.createObjectURL(blob)
//创建下载连接的A标签
const a = document.createElement('a')
a.href = url
if(i == 0){
a.download = 'zh.json'
}else if (i == 1){
a.download = 'en.json'
}else if (i == 2){
a.download = 'es.json'
}else if (i == 3){
a.download = 'ca.json'
}
//模拟点击下载连接
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
//释放资源
URL.revokeObjectURL(url)
if(i == 0){
down(1)
}else if(i == 1){
down(2)
}else if(i == 2){
down(2)
}else if(i == 2){
return;
}
}
down(0)
},
_get( url,data, resolve, fail, complete){
let _this = this;
uni.request({
url: _this.url + url,
header: {
'content-type': 'application/json'
},
data: data,
success(res) {
resolve(res.data)
},
fail(res) {
},
complete(res) {
}
});
},
_post(url,data, success, fail, complete){
let _this = this;
uni.request({
url: _this.url + url,
header: {
'content-type': 'application/json'
},
method: 'POST',
data: data,
success(res) {
success(res.data)
},
fail(res) {
},
complete(res) {
}
});
},
}
}
</script>
拆分组合上传,下载组合生成,这个逻辑。