You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CSV用Bash实现Openbox menu.xml字符串替换以本地化菜单

Bash实现Openbox menu.xml多语言本地化替换方案

需求说明

需要为Openbox的menu.xml文件做多语言本地化:根据两列CSV文件(第一列英文原文、第二列对应译文),精确替换菜单label属性中的目标文本,同时避免修改execute/action/item等功能术语,支持批量处理12种语言的翻译文件。

解决方案脚本

以下是可直接使用的Bash脚本,支持带空格的文本替换,且确保仅修改label属性内的内容:

#!/bin/bash

# 检查输入参数是否正确
if [ $# -ne 2 ]; then
    echo "用法: $0 <原始menu.xml路径> <翻译CSV路径>"
    exit 1
fi

MENU_FILE="$1"
CSV_FILE="$2"

# 备份原始文件,防止误操作
cp "$MENU_FILE" "${MENU_FILE}.bak"

# 读取CSV文件(默认逗号分隔,若CSV含逗号请改用tab分隔,将-F,改为-F$'\t')
awk -F, '{print $1 "\t" $2}' "$CSV_FILE" | while read -r original translation; do
    # 转义sed特殊字符(/、&),避免替换失败
    original_escaped=$(printf '%s\n' "$original" | sed 's/[\/&]/\\&/g')
    translation_escaped=$(printf '%s\n' "$translation" | sed 's/[\/&]/\\&/g')
    
    # 仅替换label属性中的目标文本,精准匹配避免误改功能术语
    sed -i "s/label=\"$original_escaped\"/label=\"$translation_escaped\"/g" "$MENU_FILE"
done

echo "替换完成!原文件已备份为 ${MENU_FILE}.bak"

使用步骤

  1. 准备翻译CSV文件:确保第一列是menu.xml中label的原文(完全匹配,包括空格),第二列是对应语言的译文。示例CSV行:
    File manager,文件管理器
    Terminal,终端
    
  2. 给脚本添加执行权限:
    chmod +x translate_menu.sh
    
  3. 运行脚本(替换为实际文件路径):
    ./translate_menu.sh /path/to/menu.xml /path/to/zh-CN.csv
    
  4. 针对12种语言,重复步骤3,传入对应语言的CSV文件即可。

注意事项

  • 如果CSV文件中包含逗号,建议将分隔符改为制表符(Tab),并修改脚本中awk的-F,为-F$'\t'。
  • 若译文中包含双引号,需在CSV文件中用双引号转义(例如"He said ""Hello""","他说""你好""")。
  • 脚本会自动备份原始menu.xml为menu.xml.bak,若替换出错可直接恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:07:28