自动化国际化脚本

This commit is contained in:
XieHaoLiang 2024-07-25 11:27:52 +08:00
parent e7745d945b
commit e22d3fbe99

View File

@ -2,13 +2,30 @@
#主语言包 #主语言包
MAIN_LANGUAGE_PATH="C:\Users\xhj\Desktop\lan_en.json" MAIN_LANGUAGE_PATH="lan_en.json"
#写入路径 #语言包存储前缀路径
WRITE_LANGUAGE_PATH="C:\Users\xhj\Desktop\lan_tw.json" BASE_PATH="./lan"
#原语言 #原语言
SOURCE_LANGUAGE="en" SOURCE_LANGUAGE="en"
#目标语言
TARGET_LANGUAGE="zh-tw"
#项目语言常量
LAN_ZH_CN="zh_CN"
LAN_ZH_TW="zh_TW"
LAN_EN_US="en_US"
declare -A LANG_LIST=(
["$LAN_ZH_CN"]="简体中文"
["$LAN_ZH_TW"]="繁体中文"
["$LAN_EN_US"]="英文"
)
# 项目语言映射到阿里云 阿里云API语言代码请看https://help.aliyun.com/zh/machine-translation/support/supported-languages-and-codes?spm=a2c4g.11186623.0.0.42484f4fJXlVRF
declare -A ALIYUN_LANG_MAP=(
["$LAN_ZH_CN"]="zh"
["$LAN_ZH_TW"]="zh-tw"
["$LAN_EN_US"]="en"
)
#===============以下代码请勿改动,除非知道怎么修复============================= #===============以下代码请勿改动,除非知道怎么修复=============================
@ -26,16 +43,13 @@ SIGNATURE_METHOD='HMAC-SHA1'
SIGNATURE_VERSION='1.0' SIGNATURE_VERSION='1.0'
# 执行自动翻译 # 执行自动翻译
autoTranslate() { autoTranslate() {
local en_us_path="$MAIN_LANGUAGE_PATH" local en_us_path="$BASE_PATH/$MAIN_LANGUAGE_PATH"
local en_us_data=$(cat "$en_us_path" | jq -c '.') local en_us_data=$(cat "$en_us_path" | jq -c '.')
local path="$WRITE_LANGUAGE_PATH"
local data=$(cat "$path" | jq -c '.')
local total=$(echo "$en_us_data" | jq 'length')
local current=0
# 创建临时文件 # 创建临时文件
local tmpfile=$(mktemp) local tmpfile=$(mktemp)
@ -43,6 +57,23 @@ autoTranslate() {
# 将JSON数据写入临时文件 # 将JSON数据写入临时文件
echo "$en_us_data" | jq -r 'to_entries | .[] | "\(.key) \(.value)"' > "$tmpfile" echo "$en_us_data" | jq -r 'to_entries | .[] | "\(.key) \(.value)"' > "$tmpfile"
# 循环遍历列表中的每种语言
for lang in "${!LANG_LIST[@]}"; do
# 过滤特定的语言
if [ "$lang" == "en_US" ]; then
continue
fi
local path="$BASE_PATH/lan_${ALIYUN_LANG_MAP[$lang]}.json"
# 如果文件不存在则跳过即创建并且默认写入json
if [ ! -f "$path" ]; then
echo "{}" > "$path"
fi
local data=$(cat "$path" | jq -c '.')
local total=$(echo "$en_us_data" | jq 'length')
local current=0
# 遍历JSON中的每个键值对 # 遍历JSON中的每个键值对
while read -r key value; do while read -r key value; do
current=$((current + 1)) current=$((current + 1))
@ -54,7 +85,7 @@ autoTranslate() {
fi fi
# 尝试翻译这个值 # 尝试翻译这个值
translation=$(translate "$SOURCE_LANGUAGE" "$TARGET_LANGUAGE" "$value" ) translation=$(translate "$SOURCE_LANGUAGE" "${ALIYUN_LANG_MAP[$lang]}" "$value" )
#检测返回值是否ERROR #检测返回值是否ERROR
if [[ "$translation" == "ERROR" ]]; then if [[ "$translation" == "ERROR" ]]; then
echo "Failed to translate: $key" echo "Failed to translate: $key"
@ -67,12 +98,12 @@ autoTranslate() {
fi fi
done < "$tmpfile" #读取临时文件 done < "$tmpfile" #读取临时文件
#将更新后的翻译写回文件 #将更新后的翻译写回文件
echo "$data" | jq '.' > "$path" echo "$data" | jq '.' > "$path"
# Remove the temporary file done
rm "$tmpfile"
} }