多語言是app出海必須進(jìn)行適配的,通常我們每一期多語言文本不是很多的情況下可以手動(dòng)添加,但是對(duì)于首次進(jìn)行多語言設(shè)置,手動(dòng)添加無疑讓每一個(gè)開發(fā)頭大
Excel轉(zhuǎn).arb
安裝node環(huán)境 根據(jù)平臺(tái) 自行安裝即可
1、先看文件結(jié)構(gòu)
截屏2024-05-27 15.14.29.png
2、步驟
1、cd到項(xiàng)目根目錄、使用npm init 命令一直回車生成package.json
2、執(zhí)行 npm install node-xlsx 添加excel轉(zhuǎn)json依賴庫
3、執(zhí)行 npm install shelljs 添加js 執(zhí)行shell命令依賴庫
3、Excel文件格式
截屏2024-05-27 15.18.52.png
4、生成.arb
1、cd到腳本文件夾
2、執(zhí)行 node transform_script.js
3、查看有沒有報(bào)錯(cuò),無報(bào)錯(cuò)就可以直接使用了
5、腳本
const xlsx = require('node-xlsx');
const path = require('path');
const fs = require('fs');
const shell = require('shelljs')
//要生成的arb文件名和數(shù)據(jù),文件名需改成自己項(xiàng)目中相關(guān)arb文件名字
const LangData = [
{
fileName: "intl_zh_TW.arb",
data: {}
},
{
fileName: "intl_zh_HK.arb",
data: {}
},
{
fileName: "intl_en_US.arb",
data: {}
},
{
fileName: "intl_ko_KR.arb",
data: {}
},
{
fileName: "intl_ja_JP.arb",
data: {}
}
]
main()
function main() {
initData()
const workSheetsFromFile = xlsx.parse(path.resolve(__dirname, './本地化.xlsx'));
dealSheet(workSheetsFromFile)
LangData.forEach(item => {
let filePath = path.resolve(__dirname, `./${item.fileName}`)
try {
//將json數(shù)據(jù)寫入到對(duì)應(yīng)的arb文件
fs.writeFileSync(filePath, JSON.stringify(item.data, null, 2), { encoding: 'utf8', flag: 'w' })
} catch (error) {
console.log(error);
}
});
//執(zhí)行flutter命令,將arb文件生成I10n.dart
// shell.exec('flutter pub global run intl_utils:generate')
}
function initData() {
//創(chuàng)建arb文件
for (langKey in LangData) {
let data = LangData[langKey];
let filePath = path.resolve(__dirname, `./${data.fileName}`)
try {
let fileData = fs.readFileSync(filePath, { encoding: 'utf-8' })
data.data = JSON.parse(fileData);
} catch (e) {
// console.error(e)
}
}
}
//獲取excel文件中的數(shù)據(jù)
function dealSheet(workSheetsFromFile) {
workSheetsFromFile.map(sheet => {
dealRow(sheet);
})
}
function dealRow(sheet) {
// console.log("sheet",sheet);
//將excel中的數(shù)據(jù)按照列放到:LangData 中的data中
let langList = sheet.data.filter(column => column.length);
if (Array.isArray(langList)) {
LangData.map((item, index) => {
langList.map((row) => {
const key = row[0]
const value = row[index + 1]
if (value && value.length) {
item.data[key] = value
}
// loadData(row, rowIndex, langList)
})
});
}
}
.arb 轉(zhuǎn) Excel
一般我們開發(fā)過程中 會(huì)先添加到.arb文件相應(yīng)的key,最后 才進(jìn)行翻譯,此時(shí)需要導(dǎo)出為excel供翻譯人員進(jìn)行翻譯
1、文件結(jié)構(gòu)
截屏2024-05-27 15.25.33.png
2、執(zhí)行腳本
python3 laungvage.py
3、腳本
過程中若是沒有 pandas 請(qǐng)自行安裝即可
import pandas as pd
import json
# JSON data to be converted to Excel
#data = {
# "reply_expand_comments": "展開{value}條評(píng)論",
# "profile_post_create": "發(fā)佈一則動(dòng)態(tài),讓大家看到你"
#}
with open('app_zh_Hant.arb', 'r') as file:
# 讀取并解析JSON數(shù)據(jù)
data = json.load(file)
# Creating a DataFrame from the provided dictionary
df = pd.DataFrame(list(data.items()), columns=["Key", "Value"])
# Saving the DataFrame to an Excel file
file_path = 'translated_strings.xlsx'
df.to_excel(file_path, index=False)
print(f"Excel file saved to {file_path}")