codeserver / create_languagepacks.sh
LAST233's picture
Update create_languagepacks.sh
29126de verified
#!/bin/bash
# 定义路径
EXTENSIONS_DIR="$HOME/.local/share/code-server/extensions"
OUTPUT_DIR="$HOME/.local/share/code-server"
LANGUAGE_PACK_PREFIX="ms-ceintl.vscode-language-pack-zh-hans"
# 定义输出文件
LANGUAGEPACKS_FILE="$OUTPUT_DIR/languagepacks.json"
ARGV_FILE="$OUTPUT_DIR/User/argv.json"
EXTENSIONS_JSON="$EXTENSIONS_DIR/extensions.json"
# 创建 User 目录(如果不存在)
mkdir -p "$(dirname "$ARGV_FILE")"
# 查找语言包目录
LANGUAGE_PACK_FOLDER=$(find "$EXTENSIONS_DIR" -type d -name "${LANGUAGE_PACK_PREFIX}*" | head -n 1)
# 检查语言包文件夹是否存在
if [ -z "$LANGUAGE_PACK_FOLDER" ]; then
echo "未找到语言包文件夹,请确保路径正确。"
exit 1
fi
# 从 package.json 中提取数据
PACKAGE_JSON="$LANGUAGE_PACK_FOLDER/package.json"
if [ ! -f "$PACKAGE_JSON" ]; then
echo "未找到 package.json 文件,请检查语言包目录。"
exit 1
fi
# 从 extensions.json 中提取 UUID
if [ ! -f "$EXTENSIONS_JSON" ]; then
echo "未找到 extensions.json 文件,请检查路径。"
exit 1
fi
LANGUAGE_PACK_NAME=$(jq -r '.name' "$PACKAGE_JSON")
echo "找到语言包: $LANGUAGE_PACK_NAME"
LANGUAGE_PACK_UUID=$(jq -r --arg id "ms-ceintl.$LANGUAGE_PACK_NAME" '.[] | select(.identifier.id == $id) | .identifier.uuid' "$EXTENSIONS_JSON")
if [ -z "$LANGUAGE_PACK_UUID" ]; then
echo "未能在 extensions.json 中找到对应语言包的 UUID"
exit 1
fi
# 提取其他必要信息
LANGUAGE_ID=$(jq -r '.contributes.localizations[0].languageId' "$PACKAGE_JSON")
LANGUAGE_LABEL=$(jq -r '.contributes.localizations[0].localizedLanguageName' "$PACKAGE_JSON")
LANGUAGE_PACK_VERSION=$(jq -r '.version' "$PACKAGE_JSON")
# 动态生成 translations
TRANSLATIONS=$(jq -n --arg dir "$LANGUAGE_PACK_FOLDER" --argjson translations "$(jq '.contributes.localizations[0].translations' "$PACKAGE_JSON")" '
reduce $translations[] as $item ({}; . + {($item.id): "\($dir)/\($item.path)"})
')
# 生成 languagepacks.json
HASH=$(echo -n "$LANGUAGE_PACK_UUID$LANGUAGE_PACK_VERSION" | md5sum | awk '{print $1}')
cat > "$LANGUAGEPACKS_FILE" <<EOL
{
"${LANGUAGE_ID}": {
"hash": "${HASH}",
"extensions": [
{
"extensionIdentifier": {
"id": "${LANGUAGE_PACK_NAME}",
"uuid": "${LANGUAGE_PACK_UUID}"
},
"version": "${LANGUAGE_PACK_VERSION}"
}
],
"translations": ${TRANSLATIONS},
"label": "${LANGUAGE_LABEL}"
}
}
EOL
# 格式化 languagepacks.json
jq '.' "$LANGUAGEPACKS_FILE" > "$LANGUAGEPACKS_FILE.tmp" && mv "$LANGUAGEPACKS_FILE.tmp" "$LANGUAGEPACKS_FILE"
echo "languagepacks.json 已生成并格式化: $LANGUAGEPACKS_FILE"
# 生成 argv.json
cat > "$ARGV_FILE" <<EOL
{
"locale": "${LANGUAGE_ID}"
}
EOL
# 格式化 argv.json
jq '.' "$ARGV_FILE" > "$ARGV_FILE.tmp" && mv "$ARGV_FILE.tmp" "$ARGV_FILE"
echo "argv.json 已生成并格式化: $ARGV_FILE"