
简介TranslationTools_exe_v3.1511.01.zip 是面向 Android 项目本地化与 MediaTek 平台开发人员的字符串翻译辅助工具包针对工程内字符串资源分散、缺少统一筛选入口的问题而设计可简化多语言文案的提取、翻译、校验与回填流程适合需要维护多语言资源的中初级开发者及项目人员使用。压缩包共 11 个文件约 11.41MB主要由 8 个 jar 库、1 个 sh 脚本、1 个 bat 批处理文件和 1 份 PDF 用户手册组成脚本便于在类 Unix 与 Windows 环境启动jar 组件承担字符串处理及 Excel、XML、数据库等相关依赖PDF 则提供操作说明与参数参考。已有 230 人学习或下载表明该工具在 Android 本地化场景中具有一定参考价值。读者可借助它梳理工程字符串资源、理解 MediaTek STT 的本地化处理思路并参考手册完成工具配置与批量翻译流程。对于需要批量处理 Android 多语言资源的项目它能减少逐项查找和手工整理的时间提升版本维护效率。1. 解压到桌面就报错TranslationTools_exe_v3.1511.01.zip 的第一次翻车上周远程帮人看一台办公机桌面上就躺着 TranslationTools_exe_v3.1511.01.zip解压出来的 exe 双击后提示「无法启动此程序因为计算机中丢失 MSVCP140.dll」。同一份包我挪到 D 盘一个全英文目录里再点正常启动。这类桌面翻译辅助工具是绿色 exe 分发没有安装向导、没有下一步下一步看着最省事实际上把运行库、路径权限、文件编码这些活全留给了用的人。它特别适合需要在本地快速处理术语统一、批量文本对照的场景装对了双击就能用装错了就是一闪而过、连报错都不给。下面这份笔记从环境检查写到配置落地再到翻车后怎么救照着走能少熬两个晚上。2. 装前把环境定死Windows 版本、运行库与目录规划绿色包最容易让人产生「不用装环境」的错觉然后在一个看似无关的地方卡住。我的习惯是先花十分钟把三件事确认掉系统版本够不够、运行库全不全、目录放在哪。这三件事任何一件没定后面调配置都是白费劲。2.1 系统版本与运行库先查再装v3.1511.01 这个包是 exe 形态对系统的要求主要卡在两处一是系统 API 的版本二是 VC 运行库和 .NET Framework 是否齐全。Windows 10 建议 1809内部版本 17763及以上Windows 11 全系没问题Windows 7 和 8.1 不是绝对不能跑但缺 API 导致的启动即退很难排查不建议在生产机上试。检查项合格线不达标时的典型表现系统版本Windows 10 1809 (17763) 及以上 / Windows 11双击一闪而过事件日志里能看到找不到入口点系统架构与 exe 位宽一致提示「不是有效的 Win32 应用程序」或双击完全无反应VC 运行库2015–2022 的 x86 与 x64 都装提示缺少 msvcp140.dll、vcruntime140.dll.NET Framework4.6.2 及以上若 exe 为托管程序提示需要安装 .NET Framework 的某个版本磁盘可用空间预留 2 GB 以上给缓存和日志跑批量任务中途写缓存失败先用 PowerShell 把系统信息拉出来比在设置里一层层点快得多# 系统名称、版本号、内部版本号、架构 Get-ComputerInfo | Select-Object OsName, OsVersion, OsBuildNumber, OsArchitecture # 直接看关键运行库文件在不在比查安装列表更快也更准 mswcp140.dll,vcruntime140.dll,msvcp140_1.dll,ucrtbase.dll | ForEach-Object { $p Join-Path $env:WINDIR System32\$_ {0,-22} {1} -f $_, (Test-Path $p) }第一段只是读注册表和系统接口不会改任何东西。第二段用Test-Path挨个探System32下的文件输出True就说明这个运行库就位了。注意 32 位程序读的是SysWOW64如果你确认这个 exe 是 32 位的把路径换成$env:WINDIR\SysWOW64再看一遍——很多人 64 位运行库装得整整齐齐偏偏跑的是 32 位程序于是照样报缺 dll。.NET Framework 的版本别用「控制面板里看着像 4.x」来判断直接读注册表的 Release 值# Release 528040 即 4.8 461808 即 4.7.2 Get-ItemProperty HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full | Select-Object Version, Release补运行库的时候有个取舍VC 2015–2022 的运行库是向下兼容的装最新的 x86 和 x64 两个包即可不需要把 2015、2017、2019 挨个装一遍反而容易装出多个版本互相打架。另外不建议用Get-CimInstance Win32_Product去枚举已安装程序它会触发 MSI 的重新配置检查慢不说偶尔还会把某个安装包改坏这是个老坑。2.2 目录规划为什么我从不放 Program Files 和桌面这一步是整套部署里最容易被跳过、又最容易在后面咬你一口的。三个理由第一放C:\Program Files或Program Files (x86)下exe 往同目录写配置、写日志就需要管理员权限。UAC 会把写入悄悄重定向到%LOCALAPPDATA%\VirtualStore\...现象就是你改了config.ini保存成功、重启程序却还是老样子——因为程序读的是 VirtualStore 里那份旧副本。这个坑我踩过查了两个小时。第二放桌面看起来方便但桌面很可能被同步盘接管程序在跑的时候同步进程去读日志文件会偶发文件占用日志写不进去。而且桌面路径里带用户名中文用户名一出现某些老版本组件解析路径就乱码。第三路径长度。Windows 默认单条路径上限 260 字符解压工具如果再套一层TranslationTools_exe_v3.1511.01\TranslationTools_exe_v3.1511.01\...很容易顶到上限表现为解压到一半报错或者文件莫名丢失。我的目录规划固定成这样路径用途是否随版本升级保留D:\Tools\TranslationTools\app\放 exe 和它自带的 dll升级时整体替换D:\Tools\TranslationTools\data\术语表、词库、用户配置必须保留升级前备份D:\Tools\TranslationTools\logs\运行日志保留最近 30 天D:\Tools\TranslationTools\cache\临时缓存可随时清空不保留D:\Tools\TranslationTools\backup\配置与数据的归档按日期保留建目录一条命令就够-Force让它在已存在时不报错可以反复执行$root D:\Tools\TranslationTools app,data,logs,cache,backup | ForEach-Object { New-Item -ItemType Directory -Force -Path (Join-Path $root $_) | Out-Null } Get-ChildItem $root | Select-Object Name, FullName全英文、无空格、层级不超过四层这条规矩看起来土但它能一次性规避掉编码、权限、路径长度三类问题。数据目录和程序目录分开的意义在于升级时只动appdata原地不动回滚就是把旧版app目录拷回来不用重配一遍。2.3 版本号怎么读v3.1511.01 与多版本共存3.1511.01这个串不要按3.15.11去理解。主版本是 3中间的1511更像编译批次或者年月标记末尾01是修订号。这么读的实际意义在于同主版本内的小修订配置文件结构通常兼容跨主版本比如以后出现 4.x就要做好配置项被重命名、旧配置文件不认的准备。多版本共存这件事我的建议是不要在生产机上并行跑两个版本。绿色包默认会在 exe 同目录找配置两份包如果共用同一个data目录改配置会互相覆盖出问题时你根本分不清是哪份在读。真要留旧版做回滚就整个目录改名保留比如app_v3151101用的时候手动指向不放进 PATH也不做快捷方式并排。升级前必做的一步是把data和app里所有*.ini、*.json、*.csv打包归档# 升级前打快照文件名带日期出问题直接解压回滚 $stamp Get-Date -Format yyyyMMdd_HHmm $dst D:\Tools\TranslationTools\backup\pre_upgrade_$stamp.zip Compress-Archive -Path D:\Tools\TranslationTools\app\*.ini, D:\Tools\TranslationTools\app\*.json, D:\Tools\TranslationTools\data\* -DestinationPath $dst -Force-Force允许覆盖同名压缩包$stamp保证每次名字不同。这一步就是后悔药成本二十秒省下的是重配一整天的功夫。3. 解压与首次启动从 zip 到第一个能用的窗口环境定完接下来是解压、解锁、首次启动。这三步里的坑不多但每一个都能让你怀疑包是坏的。3.1 校验与解压别跳过那串哈希先把 zip 的 SHA256 打出来跟发布方给的校验值对一遍。对不上就别解压了直接重下——半个包解压出来照样能跑一部分功能然后在你最需要它的时候崩这种问题最难查。# 计算 SHA256和发布页给出的值逐位比对 Get-FileHash .\TranslationTools_exe_v3.1511.01.zip -Algorithm SHA256 | Format-List Algorithm, Hash, Path # 查看是否带「来自网络」标记有输出说明带 Get-Item .\TranslationTools_exe_v3.1511.01.zip -Stream Zone.Identifier -ErrorAction SilentlyContinue第二段是在探测 NTFS 的备用数据流。从网络下载的压缩包会带Zone.Identifier标记解压出来的 exe 会继承这个标记于是首次运行时安全软件会拦一道或者干脆静默阻止。解除方法是先对 zip 解锁、再解压Unblock-File .\TranslationTools_exe_v3.1511.01.zip # 解压到 app 目录注意不要带中文和空格 Expand-Archive -Path .\TranslationTools_exe_v3.1511.01.zip -DestinationPath D:\Tools\TranslationTools\app -ForceUnblock-File只清标记不改内容Expand-Archive的-Force用于覆盖旧文件做升级时正好。解压完记得再看一眼app目录的实际层级有些包会自带一层同名文件夹多套一层会让后面写快捷方式时路径全错。3.2 首次启动它到底往哪里写了文件绿色包最麻烦的地方是「你不知道它偷偷写了什么」。我的办法是做一次前后快照对比跑一次就能把它写文件的行为摸清楚比翻文档快。# 启动前拍快照 Get-ChildItem D:\Tools\TranslationTools -Recurse -File | Select-Object FullName, Length, LastWriteTime | Export-Csv D:\Tools\TranslationTools\backup\before.csv -NoTypeInformation # 手动双击 app\TranslationTools.exe等主窗口出来随便点两下然后正常退出 # 再拍一次快照 Get-ChildItem D:\Tools\TranslationTools -Recurse -File | Select-Object FullName, Length, LastWriteTime | Export-Csv D:\Tools\TranslationTools\backup\after.csv -NoTypeInformation # 对比只看新增和大小变化的文件 Compare-Object (Import-Csv D:\Tools\TranslationTools\backup\before.csv) (Import-Csv D:\Tools\TranslationTools\backup\after.csv) -Property FullName, Length -PassThru | Select-Object FullName, Length, SideIndicatorSideIndicator是表示新增表示消失大小变了也会出现在结果里。跑完这一次你就能确认配置文件到底生成在app还是data日志落在哪缓存目录是不是默认指向了用户目录。如果发现它把日志写到了%APPDATA%下别硬改先记下来到配置那一章用参数把它引回来。首次启动如果窗口一闪就没了别反复双击直接去事件查看器捞# 最近一小时内应用程序日志里的错误和警告 Get-WinEvent -FilterHashtable { LogName Application StartTime (Get-Date).AddHours(-1) } | Where-Object { $_.LevelDisplayName -in Error,Warning } | Select-Object TimeCreated, ProviderName, Id, Message -First 10这条命令基本是所有 Windows 桌面程序闪退的救命稻草。Message里通常能看到具体的模块名和异常码缺 dll、权限拒绝、配置解析失败都会写在这儿。3.3 目录结构拆解哪些能删、哪些碰不得解压后常见是这样一套结构名字可能有出入按功能对应着找路径作用处理建议app\TranslationTools.exe主程序唯一需要建快捷方式的文件app\*.dll依赖库不能单独删缺一个就起不来app\config.ini主配置改前先备份data\glossary*.csv术语表 / 词库核心资产定期归档logs\*.log运行日志可轮转清理出问题时先看它cache\临时缓存可整目录清空不影响配置判断标准很简单app和cache可以重建data丢了就得重做。所以备份策略永远是压data优先其次才是config.ini。4. 配置落地把辅助工具调到顺手能启动只是及格配置才是决定这套辅助工具能不能长期用的部分。配置改错比装错更难查因为程序照常启动只是行为不对。4.1 主配置先备份再逐段改配置文件一般是 INI 或 JSONINI 更常见。改之前先复制一份带日期的备份这是硬规矩$cfg D:\Tools\TranslationTools\app\config.ini Copy-Item $cfg $cfg.bak.$(Get-Date -Format yyyyMMdd_HHmm) -Force一个典型的配置结构大概长这样键名可能不同但分组逻辑大同小异[General] Languagezh-CN ; 界面语言跟系统语言不一致时容易出半中半英 Themelight AutoStartfalse ; 不建议开机自启先手动确认能跑再开 [Path] DataDir..\data ; 相对路径基于 exe 所在目录别写成绝对路径 LogDir..\logs CacheDir..\cache [Translate] Endpointhttps://api.example.com/v1/translate Timeout8000 ; 单次请求超时毫秒 BatchSize50 ; 单批条数越大越快但越容易整批失败 Retry2 ; 失败重试次数 [Hotkey] CaptureCtrlAltT ; 取词热键 ToggleCtrlAltSpace ; 主窗口显隐几个参数值得单独说。DataDir用相对路径而不是D:\Tools\...绝对路径好处是整套目录搬走还能用坏处是相对基准取决于启动方式——从快捷方式启动和从命令行启动工作目录可能不同。稳妥做法是快捷方式里显式设置「起始位置」为app目录。Timeout给 8000 毫秒是个折中。设太小长句子经常超时设太大一个卡住的请求会让整个界面等着用户以为程序死了。BatchSize给 50 同理批量处理时 100 条一批看着快但只要有一条触发接口限流整批都要重来50 条是失败成本还能接受的范围。Retry2意味着最多请求三次再多就该看日志找根因了别靠重试掩盖问题。如果配置里需要放接口凭据不要明文写在config.ini里。常见做法是走用户级环境变量程序支持读取就直接引用变量名# 写入当前用户的环境变量重启程序后生效 [Environment]::SetEnvironmentVariable(TT_API_TOKEN, 这里填实际值, User) # 验证 [Environment]::GetEnvironmentVariable(TT_API_TOKEN, User)User表示只对当前用户生效不改系统级权限最小。设完必须重开程序已经跑着的进程读不到新变量这一点经常被忽略。4.2 术语表与热键两个最影响手感的地方术语表决定输出一致性。用 CSV 维护四列足够原文、译文、是否区分大小写、备注。备注列别省半年后你完全不记得当初为什么这么定。source,target,case_sensitive,note throughput,吞吐量,false,性能类文档统一用词 cache,缓存,false,不要译成高速缓存 session,会话,false,登录态语境下用会话编码是这里最大的坑。CSV 存成 UTF-8 带 BOM中文才不会在程序里变乱码不带 BOM 的 UTF-8 有些组件会按 GBK 读出来全是问号。PowerShell 5.1 和 7 的行为还不一样写法要区分# PS 5.1-Encoding UTF8 会写 BOM正好符合要求 $rows Import-Csv D:\Tools\TranslationTools\data\glossary.csv -Encoding Default $rows | Export-Csv D:\Tools\TranslationTools\data\glossary_utf8bom.csv -NoTypeInformation -Encoding UTF8 # PS 7UTF8 默认不带 BOM要显式指定 utf8BOM # $rows | Export-Csv ... -Encoding utf8BOM-Encoding Default是按系统 ANSI 代码页读用来兼容从 Excel 另存出来的旧文件-NoTypeInformation去掉首行多余的类型声明否则表头会多一行#TYPE程序解析会错位。热键冲突是另一类高频问题。CtrlAlt开头的组合最容易被输入法、截图工具、显卡驱动面板抢走现象是按了没反应或者两个功能同时弹出来。换到CtrlShiftAlt或者F9这类单键冲突概率低很多。改完热键要重启程序多数实现是在启动时注册全局热键的。4.3 日志与缓存出问题时唯一的黑匣子日志是排查问题的黑匣子前提是级别开对。日常用INFO排查期临时调到DEBUG查完立刻改回去——DEBUG级别的日志一天能写几百兆磁盘满了又是新问题。# 实时跟踪最新日志只看最后 100 行并持续输出 Get-Content D:\Tools\TranslationTools\logs\app.log -Tail 100 -Wait # 只看错误和异常行快速定位 Select-String -Path D:\Tools\TranslationTools\logs\*.log -Pattern ERROR|Exception|Timeout | Select-Object -Last 30-Tail 100 -Wait相当于 Linux 下的tail -f改完配置复现一次日志会即时刷出来。Select-String那段用来在多个日志文件里做关键词捞取-Last 30防止刷屏。缓存目录的清理要克制。整目录删cache是安全的删data里的东西是灾难# 只清 7 天前的缓存文件保留最近的避免刚用完又要重建 Get-ChildItem D:\Tools\TranslationTools\cache -Recurse -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item -Force -WhatIf # 确认输出没问题后去掉 -WhatIf 再执行一次-WhatIf是干跑只打印将要删除什么不真删。这个习惯救过我一次当时路径变量写错-WhatIf把整个data目录列了出来及时收手。5. 避坑与排查五条踩坑记录这一章全是真金白银换来的。每条按「现象 → 原因 → 解决」写遇到对得上的直接跳到解决那一步。5.1 启动阶段的三类问题第一条提示缺少 msvcp140.dll 或 vcruntime140.dll。现象是双击后弹窗关掉就没下文。原因是 VC 运行库没装或者只装了 x64 而程序是 32 位。解决办法是装 2015–2022 的 x86 与 x64 两个包装完重启一次——不重启有时 dll 还没进搜索路径。装之前先用 2.1 那段Test-Path确认System32和SysWOW64里到底缺哪个别盲目装一堆。第二条双击完全没反应也没有任何提示。这种现象最吓人因为连报错都没有。原因通常有两个一是 exe 被安全软件静默拦了二是包没解压完整。先查拦截记录再重新算一遍 zip 的哈希然后确认app目录下的 dll 数量和发布说明一致。如果都正常用命令行带参数启动把标准错误输出接出来看# 从 app 目录启动把输出和错误都留在终端里 Push-Location D:\Tools\TranslationTools\app .\TranslationTools.exe 21 | Tee-Object -FilePath D:\Tools\TranslationTools\logs\manual_run.log Pop-Location21把标准错误合并到标准输出Tee-Object一边打印一边存文件。图形程序不一定往控制台写但只要有输出就能看见完全没有输出的话直接去看 3.2 那段事件日志命令。第三条安全软件报未知程序并自动隔离。现象是解压后 exe 消失或者第一次能跑第二次就没了。原因是绿色 exe 没有签名被启发式规则命中。解决不是关掉防护而是把这个目录加进信任列表同时确认包来源可信、哈希对得上。加信任之前先做一次全盘扫描确认没被感染再放行。5.2 运行阶段的两类异常第四条配置文件改了不生效。现象是config.ini里把Timeout从 8000 改成 15000保存成功重启程序还是按原来的跑。原因有两种一是程序实际读的不是你改的那份配置3.2 的快照对比能确认二是之前把程序放在Program Files下UAC 把写入重定向到了%LOCALAPPDATA%\VirtualStore。解决办法是先确认程序读的路径把整个目录搬到非受保护路径下然后清理残留# 查 VirtualStore 里有没有旧副本捣乱 $vs $env:LOCALAPPDATA\VirtualStore if (Test-Path $vs) { Get-ChildItem $vs -Recurse -Filter config.ini -ErrorAction SilentlyContinue | Select-Object FullName, LastWriteTime }有输出就说明确实存在重定向副本删之前先备份然后重新在data目录里配一遍。第五条批量处理时中文全是问号或者整批卡死。现象是短句没问题一跑几百条的 CSV 就乱码或者进度条停在某个位置不动。乱码的原因是 CSV 编码不是 UTF-8 带 BOM按 4.2 那套转一遍就好。卡死多半是BatchSize太大加上接口限流表现为整批超时、重试三次后放弃。把BatchSize降到 20–50Timeout提到 8000–10000再看日志里的Timeout关键词是否消失。注意改配置的顺序永远是先备份、再改一个键、重启验证、确认无误再改下一个。一次改五处出问题你没法判断是哪一处引起的。6. 装完怎么验证三条线跑通才算真的装好能打开窗口不算装好。我判断一套桌面辅助工具是否真的落地看三条验证线冷启动、功能闭环、数据落盘。三条都过才算这套环境能交给别人用。验证线具体做法通过标准冷启动重启系统后不手动改任何配置直接启动正常进主界面配置项与重启前一致功能闭环用一份 50 条左右的文本走一遍完整流程术语表里挑三条必中词三条指定术语全部按表命中无乱码数据落盘启动后检查data、logs、cache三个目录日志有新内容配置无新增副本缓存写在预期位置冷启动这条最容易被忽略但它能一次性暴露权限重定向和环境变量没生效两类问题。功能闭环别用网上随手拷的一段文字要用你自己术语表里有的词否则命不命中根本看不出来。数据落盘看的是「它有没有偷偷写到别处」跑完 3.2 的快照对比就一目了然。嫌一条条点麻烦把自检写成脚本每次升级或换机器后跑一遍# 最小自检目录、配置、日志新鲜度、进程 $root D:\Tools\TranslationTools $checks ( { Name exe 存在; Pass Test-Path $root\app\TranslationTools.exe }, { Name 主配置存在; Pass Test-Path $root\app\config.ini }, { Name 数据目录; Pass (Get-ChildItem $root\data -File -Recurse).Count -gt 0 }, { Name 日志近 24h; Pass (Get-ChildItem $root\logs -File | Where-Object LastWriteTime -gt (Get-Date).AddHours(-24)).Count -gt 0 } ) $checks | ForEach-Object { {0,-12} {1} -f $_.Name, $(if ($_.Pass) { OK } else { FAIL }) }四行判定分别对应程序文件、配置、核心数据、运行痕迹。任何一项FAIL回去翻对应章节不用从头再来。这段脚本我一般存成selfcheck.ps1放在backup目录里跟配置快照放一起。有个小技巧值得单独说把当前能跑通的app目录和data目录整体复制一份成app_good、data_good出问题时先切过去确认是不是环境问题再回头修。这比逐项排查快得多尤其是线上急着用的时候。提示验证通过后再建桌面快捷方式快捷方式的「起始位置」填D:\Tools\TranslationTools\app否则相对路径配置在某些启动方式下会解析错。从那以后我每次装这类绿色包都强制先跑一遍快照对比再动配置——不为别的就是不想再花两小时去 VirtualStore 里找一个看不见的副本。希望帮到你。本文还有配套的精品资源点击获取