用途:对 Android 项目(Amethyst)的双资源树进行翻译覆盖检查,找出默认 values/strings.xml 中存在、而各目标语言目录缺失的可翻译键,并输出缺失键列表供后续翻译或原样复制英文值。
主要能力:分别处理两套独立资源树——amethyst(Android R.string)的 amethyst/src/main/res/values 与 values-<locale>,以及 commonsUI(Compose Multiplatform Res.string)的 commonsUI/src/commonMain/composeResources/values 与 values-<locale>;过滤 translatable="false";对 <string> 与 <plurals> 两种资源类型分别 diff;默认目标语言为 cs、pt-rBR、sv-rSE、de-rDE;统计各语言缺失数量,便于与 Crowdin 未翻译计数核对;检测两棵树中同名键的英文值差异,仅当英文值逐字相同时才允许复制既有翻译。
必要用法:以 cs 作为参考先 diff,再逐目标语言 diff 并合并结果。strings 示例:comm -23 <(grep '<string name=' 默认文件 | grep -v 'translatable="false"' | sed 's/.name="([^"])"./\1/' | sort) <(grep '<string name=' 目标语言文件 | sed 's/.name="([^"])"./\1/' | sort)。plurals 必须单独 diff,同样用 <plurals name= 与 comm -23。可循环两个 base 路径一次跑完两棵树。
限制与注意:locale 目录集合在两棵树间可能不同,需分别枚举;缺失键需区分真正未翻译与源文一致的英文保留项,后者可原样复制英文值以进入 Crowdin 流程;<plurals> 不可直接复制英文,须按各语言 CLDR 类别处理;同名键不等于同义,须比对英文值;commons 树不使用首尾空格引号包裹约定;仓库内修改已翻译值可能被下一次 Crowdin 同步覆盖,持久修改需在 Crowdin 界面完成。