You need to enable JavaScript to run this app. 如何用Bash结合translate-shell批量替换语言配置文件中等号后的文本
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash结合translate-shell批量替换语言配置文件中等号后的文本

大体积键值对语言配置文件的批量俄译实现方案

原始需求

手头有体量较大的键值对格式语言配置文件,需要将文件中所有=符号与行尾换行符之间的英文内容,替换为对应俄语译文,输入输出示例如下:

# 输入配置片段
screen.LIGHT_COLOR=Lighting Color 
screen.LIGHT_M=Light (Morning)
screen.AMBIENT_M=Ambient (Morning)

# 输出配置片段
screen.LIGHT_COLOR=Цвет Освещения
screen.LIGHT_M=Свет (Утро)
screen.AMBIENT_M=Эмбиент (Утро)

初始实现方式

最初仅能通过逐行提取待译文本、调用翻译工具的方式实现功能,对应shell脚本如下:

while IFS= read -r line
do
        echo $line | cut -d= -f2- | trans -b en:ru
done < file.txt

脚本运行后仅能输出逐行的译文结果:

Цвет Освещения
Свет (Утро)
Эмбиент (Утро)

注:trans是translate-shell命令行工具的简称,运行速度较慢但可满足基础翻译需求,-b参数表示输出简明翻译结果,en:ru指定翻译方向为英语转俄语。

实际踩坑与优化方向

在实际使用中发现translate-shell存在使用限制:固定时间窗口内仅允许发起约110次请求,逐行处理1300条待译内容会发起1300次独立请求,极易触发限流导致脚本中断。
经社区讨论确定的优化逻辑为:将所有待译内容打包为单次请求发送,替代逐行请求,可将整体处理时长从数分钟压缩至数秒,同时规避限流问题。

最终可运行的脚本实现

以下脚本是刚接触相关技术3天时编写的,实现逻辑较为简单直接

# 拆分原文件的键和待译英文值,分别存入两个临时文件
cut -s -d = -f 1 en_US.lang > option_en.txt
cut -s -d = -f 2 en_US.lang > value_en.txt

# 将所有待译的英文值拼接为单块,用自定义分隔符` :: `连接
sed ':a; N; $!ba; s/\n/ :: /g' value_en.txt > value_en_block.txt

# 单次调用翻译工具完成全量内容翻译
trans -b en:ru -i value_en_block.txt -o value_ru_block.txt

# 将翻译完成的内容块,按相同分隔符拆回逐行格式
sed 's/ :: /\n/g' value_ru_block.txt > value_ru.txt

# 合并原键和对应俄语译文,生成最终的俄语配置文件
paste -d = option_en.txt value_ru.txt > ru_RU.lang

# 清理临时文件
rm option_en.txt value_en.txt value_en_block.txt value_ru.txt value_ru_block.txt

方案落地过程中参考了Taylor G.、Armali等社区参与用户的建议。

内容的提问来源于stack exchange,提问作者koal42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 14:45:04