【发布时间】:2021-04-21 20:09:00
【问题描述】:
有一个巨大的文件,我想用它的翻译替换所有在 '=' 和 '\n' 之间的文本,这里是一个例子:
input:
screen.LIGHT_COLOR=Lighting Color
screen.LIGHT_M=Light (Morning)
screen.AMBIENT_M=Ambient (Morning)
output:
screen.LIGHT_COLOR=Цвет Освещения
screen.LIGHT_M=Свет (Утро)
screen.AMBIENT_M=Эмбиент (Утро)
到目前为止,我所做的只是提取和翻译目标文本。
while IFS= read -r line
do
echo $line | cut -d= -f2- | trans -b en:ru
done < file.txt
output:
Цвет Освещения
Свет (Утро)
Эмбиент (Утро)
*trans 是 translate-shell 的缩写。它很慢,但可以完成工作。 -b 简要翻译; en:ru 表示英语到俄语。
如果您有任何建议或解决方案,我会很高兴知道,谢谢!
编辑,以防有人需要:
在发现 trans-shell 限制后,我最终接受了 @TaylorG. 的建议。翻译壳每次允许大约 110 个请求是接缝。单独处理每一行会产生 1300 个请求,这会破坏脚本。
长话短说,将所有数据打包到一个请求中会更快。它可以将处理时间从几分钟减少到几秒钟。抱歉代码乱七八糟,这是我的第三天:
cut -s -d = -f 1 en_US.lang > option_en.txt
cut -s -d = -f 2 en_US.lang > value_en.txt
# merge lines
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
# remove trmporary files
rm option_en.txt value_en.txt value_en_block.txt value_ru.txt value_ru_block.txt
感谢 Taylor G.、Armali 和每一位评论员
【问题讨论】:
标签: bash file translation