JavaScript 为 i18n-vue 重新格式化嵌套对象
JavaScript Nested Objects Reformatting for i18n-vue
我有一个 JS 对象,如第一个示例所示,在一个使用 i18n-vue 的 VUE JS Web 应用程序中。我的翻译存储在数据库中,检索时格式如下。
我需要重新格式化它才能与 i18n-vue 一起使用,但我没有运气让它工作。
我需要从这里开始:
{
0:{
directory: {
0: { english: 'Home', value: 'Casa' }
1: { english: 'News', value: 'Noticias' }
2: { english: 'Contact', value: 'Contacto' }
}
locale: 'es'
}
1:{
directory: {
0: { english: 'Home', value: '家' }
1: { english: 'News', value: '消息' }
2: { english: 'Contact', value: '接触' }
}
locale: 'zh'
}
}
为此:
{
'es': {
'Home': 'Casa',
'News': 'Noticias',
'Contact': 'Contacto',
},
'zh': {
'Home': '家',
'News': '消息',
'Contact': '接触',
},
}
非常感谢任何帮助。我仍在学习 JS 并且已经能够解决大多数阅读 SO 的问题,但是这个真的让我感到困惑。提前致谢!
我假设你输入的是一个对象,使用.reduce()
可以将对象转换成另一种外观。
您可以运行代码段来查看结果
const translations = {
0:{
directory: {
0: { english: 'Home', value: 'Casa' },
1: { english: 'News', value: 'Noticias' },
2: { english: 'Contact', value: 'Contacto' }
},
locale: 'es'
},
1:{
directory: {
0: { english: 'Home', value: '家' },
1: { english: 'News', value: '消息' },
2: { english: 'Contact', value: '接触' }
},
locale: 'zh'
}
}
/* transformation */
const result = Object.keys(translations).reduce((translationObj, key) => {
const { directory, locale } = translations[key]
// transform directory to be { 'Home': 'Casa' }
const directories = Object.keys(directory).reduce((directoryObj, directoryKey) => {
const { english, value } = directory[directoryKey]
return ({ ...directoryObj, [english]: value })
}, {})
return ({ ...translationObj, [locale]: directories })
}, {})
console.log(result)
我有一个 JS 对象,如第一个示例所示,在一个使用 i18n-vue 的 VUE JS Web 应用程序中。我的翻译存储在数据库中,检索时格式如下。
我需要重新格式化它才能与 i18n-vue 一起使用,但我没有运气让它工作。
我需要从这里开始:
{
0:{
directory: {
0: { english: 'Home', value: 'Casa' }
1: { english: 'News', value: 'Noticias' }
2: { english: 'Contact', value: 'Contacto' }
}
locale: 'es'
}
1:{
directory: {
0: { english: 'Home', value: '家' }
1: { english: 'News', value: '消息' }
2: { english: 'Contact', value: '接触' }
}
locale: 'zh'
}
}
为此:
{
'es': {
'Home': 'Casa',
'News': 'Noticias',
'Contact': 'Contacto',
},
'zh': {
'Home': '家',
'News': '消息',
'Contact': '接触',
},
}
非常感谢任何帮助。我仍在学习 JS 并且已经能够解决大多数阅读 SO 的问题,但是这个真的让我感到困惑。提前致谢!
我假设你输入的是一个对象,使用.reduce()
可以将对象转换成另一种外观。
您可以运行代码段来查看结果
const translations = {
0:{
directory: {
0: { english: 'Home', value: 'Casa' },
1: { english: 'News', value: 'Noticias' },
2: { english: 'Contact', value: 'Contacto' }
},
locale: 'es'
},
1:{
directory: {
0: { english: 'Home', value: '家' },
1: { english: 'News', value: '消息' },
2: { english: 'Contact', value: '接触' }
},
locale: 'zh'
}
}
/* transformation */
const result = Object.keys(translations).reduce((translationObj, key) => {
const { directory, locale } = translations[key]
// transform directory to be { 'Home': 'Casa' }
const directories = Object.keys(directory).reduce((directoryObj, directoryKey) => {
const { english, value } = directory[directoryKey]
return ({ ...directoryObj, [english]: value })
}, {})
return ({ ...translationObj, [locale]: directories })
}, {})
console.log(result)