Locale Emulator 使用指南:日文程序乱码与区域不匹配问题的配置步骤和排查方法
Locale Emulator 是一款 Windows 下的系统区域与语言模拟器,它让单个程序以指定的区域(例如 ja-JP)、时区启动,并可重定向部分语言相关注册表项,而无需改动系统全局区域设置。如果你遇到日文(或其他语言)程序文本显示为方块、编码报错或拒绝启动的情况,并且问题根源是运行环境的区域环境,而不是缺少字体文件,这个项目适合你。
一、先判断:问题是否出在区域环境
Locale Emulator 的作用范围比较明确,先做判断可以避免装完工具却无效果。
它做的事情(对应源码行为):
- 以指定区域对应的 ANSI/OEM 代码页、区域 ID 启动目标进程;
- 设置目标进程的时区;
- 可选地把一批与语言相关的注册表项重定向为指定区域的值;
- 可选地伪造系统 UI 语言相关接口的返回值;
- 可选地以挂起状态创建进程,便于调试。
先检查这些情况:
| 现象 | 可能原因 | 是否适合用 Locale Emulator |
|---|---|---|
| 程序内文字显示为方块,但菜单、按钮等系统文字正常 | 程序按特定代码页解码文本,而当前系统区域不匹配 | 适合 |
| 启动即报错,提示编码或语言相关错误 | 程序读取区域/注册表中的语言设置失败 | 适合,可先试默认配置 |
| 安装后完全无中文/日文显示,其他程序也异常 | 系统缺少对应字体 | 不适合,先确认是否已安装对应字体 |
| 程序是 .NET/现代框架且自带编码配置 | 与系统区域关联不大 | 优先检查程序自身设置 |
另外注意使用前提:
- 安装器会检查系统版本,仅支持 Windows 7、8/8.1 和 10;
- 右键菜单针对 单个 .exe 文件 才会出现(选择多个文件时不会出现);
- 非
.exe文件也可以通过它启动:程序会查找该扩展名关联的程序并以模拟环境运行。
二、安装与最小可用步骤
这里按"安装 → 注册右键菜单 → 首次运行 → 验证"的顺序组织,因为右键菜单是首次接触用户最直接的入口,先打通它才能谈配置管理。
1. 获取程序
两种方式:
- 直接获取官方发布的可运行版本(README 指向官方发布渠道,以官方发布页说明为准);
- 从源码构建:
git clone https://gitcode.com/gh_mirrors/lo/Locale-Emulator
构建需要 Visual Studio 2015/2017,打开 LocaleEmulator.sln 执行 Build。README 同时说明:还需要获取核心库 Locale-Emulator-Core 并构建,把其中的 LoaderDll.dll 和 LocaleEmulator.dll 拷贝到输出目录——运行时缺少这两个文件会直接报错(见排查部分)。
2. 注册右键菜单
运行 LEInstaller.exe(源码见 LEInstaller/),它会:
- 把
LEContextMenuHandler.dll注册为资源管理器上下文菜单扩展; - 提供"当前用户安装"和"全部用户安装(需管理员)"两个入口;
- 安装完成后会提示:如果是从旧版本升级,需要重启系统或重启
explorer.exe。
3. 首次运行并验证
在任意单个 .exe 上右键,应看到 "Locale Emulator" 子菜单,固定包含三项(文案来自 LEContextMenuHandler/Lang/DefaultLanguage.xml):
| 菜单项 | 实际执行的命令 |
|---|---|
| Run with Application Profile | LEProc.exe -run "%APP%" |
| Modify Application Profile | LEProc.exe -manage "%APP%" |
| Edit Global Profile List | LEProc.exe -global |
如果某个全局配置勾选了 "Show this profile in main menu",还会以配置名出现在子菜单中。
验证方式:对目标程序选择 "Run with Application Profile"。若该程序还没有独立配置文件,会打开图形界面让你设置;设置完成后程序即以该配置启动。能正常显示目标语言文本,说明链路已通。
4. 命令行等价方式
图形入口背后都是 LEProc/Program.cs 中的命令行逻辑,不带参数运行 LEProc.exe 会打印用法说明。常用形式:
LEProc.exe "C:\Games\demo\game.exe"
LEProc.exe -run "C:\Games\demo\game.exe"
LEProc.exe -runas <guid> "C:\Games\demo\game.exe"
LEProc.exe -manage "C:\Games\demo\game.exe"
LEProc.exe -global
- 直接跟路径:按"程序自身配置 → 第一个全局配置 → 默认 ja-JP 配置"的优先级选择配置启动;
-run:只使用程序自身的配置文件(.le.config),没有则打开图形界面新建;-runas:用指定 guid 的全局配置启动,可避免"到底用了哪份配置"的歧义;-manage、-global:分别打开单程序配置界面和全局配置管理界面。
三、配置文件结构与常用参数
配置分两层:
- 全局配置:安装目录下的
LEConfig.xml,存放多个可复用配置(首次运行自动创建,默认生成 "Run in Japanese" 和 "Run in Japanese (Admin)" 两个 ja-JP 配置); - 单程序配置:与 exe 同名的
<程序名>.exe.le.config,存放在程序所在目录,优先级高于全局配置。
两个文件都是 XML,字段由 LECommonLibrary/LEConfig.cs 读写,含义如下:
| 参数 | 界面文案 | 默认值 | 说明 |
|---|---|---|---|
Location | Location | ja-JP | 区域语言代码,决定代码页与区域 ID |
Timezone | Timezone | Tokyo Standard Time | 目标进程使用的时区 |
Parameter | 启动参数 | 空 | 传给程序的启动参数;设置后优先于命令行附加参数 |
RedirectRegistry | Fake language-related keys in Registry | true | 重定向一批语言相关注册表项 |
IsAdvancedRedirection | Fake system UI language | false | 额外 hook UI 语言相关接口 |
RunAsAdmin | Run as administrator | false | 以管理员启动,LE 会自动触发提权 |
RunWithSuspend | Create process with CREATE_SUSPENDED | false | 挂起状态创建进程,供调试器附加 |
MainMenu | Show this profile in main menu | false | 全局配置是否显示在右键菜单 |
单程序配置界面(LEGUI/AppConfig.xaml)还提供了一个 "Create shortcut" 按钮:在桌面生成指向 LEProc.exe -run "<程序路径>" 的快捷方式。也可以自己为 LEProc.exe 建一个不带参数的快捷方式,然后把目标 exe 拖放到快捷方式上启动。
四、不同场景下的取舍
改动越少越容易排查。建议从最小配置开始,确认问题仍在再逐项打开额外开关:
| 场景 | 建议配置 | 原因 |
|---|---|---|
| 一般日文游戏/程序乱码 | ja-JP + 默认时区,RedirectRegistry 保持默认开启,其余关闭 | 覆盖大多数代码页不匹配问题 |
| 程序查询"系统界面语言"后才判断语言 | 再开启 IsAdvancedRedirection | 仅当确认程序读取的是 UI 语言接口时才有必要 |
| 程序必须管理员权限才能运行 | 开启 RunAsAdmin | LE 检测到需要提权时会自行以管理员身份重启自身完成启动 |
| 启动即崩溃、需要调试 | 开启 RunWithSuspend | 进程以挂起状态创建,可附加调试器或用任务管理器停止;界面会先给出确认提示 |
| 多个程序共用同一套环境 | 建全局配置并勾选 MainMenu | 在右键菜单直接以配置名启动,也可用 -runas <guid> 精确指定 |
不建议一开始就把所有开关打开:注册表重定向、UI 语言伪造叠加在一起后,一旦出问题很难定位是哪一项引起。
五、常见故障与排查思路
1. 右键菜单里没有 Locale Emulator
- 可能原因:未执行安装;选择了一个以上的文件;从旧版本升级后未刷新资源管理器。
- 检查动作:先确认只对单个 exe 右键;确认
LEInstaller曾成功完成注册。 - 修改动作(确认是菜单未注册后再做):重启资源管理器使扩展生效。重启资源管理器会短暂丢失桌面图标与打开的窗口,可先关闭重要程序:
taskkill /f /im explorer.exe
start explorer.exe
- 预期结果:重新右键单个 exe,出现 "Locale Emulator" 子菜单。安装器自身也提示:从旧版本升级时需要重启系统或
explorer.exe。
2. 提示 "Some of the core Dlls are missing"
这是 LEProc/Program.cs 中 CheckCoreDlls 的检查失败,弹窗会列出缺失的 LoaderDll.dll、LocaleEmulator.dll,并提示可能是杀毒软件移除或移动了文件。
- 检查动作:到安装目录确认这两个文件是否存在;查看杀毒软件隔离区记录。
- 修改动作:按提示将文件加入白名单后重新安装。
- 预期结果:再次运行时不再弹出缺 DLL 提示。
3. 用对了入口,但乱码依旧
按启动优先级核对"实际生效的是哪份配置":单程序 .le.config > 第一个全局配置 > 默认 ja-JP。
- 检查动作:
- 查看程序目录下是否存在
<程序名>.exe.le.config,确认其中Location是否为ja-JP; - 若希望强制用某份全局配置,改用
LEProc.exe -runas <guid> "<程序路径>"启动,排除配置选择歧义; - 确认问题不是字体缺失:用系统记事本等方式显示同一段日文,若系统本身缺字体,需要安装字体。
- 查看程序目录下是否存在
- 预期结果:排除配置选择问题后仍乱码,则大概率转向字体或程序自身支持问题,此时 Locale Emulator 已不是症结。
4. 配置文件损坏或误删
两个配置文件都是纯文本 XML。
- 修改前:先复制一份备份(复制
LEConfig.xml和相关的.le.config),不要直接删除原文件。 - 修改动作:确认备份后再处理。删除单程序
.le.config的副作用是回到默认配置逻辑;删除LEConfig.xml会在下次启动时按默认值重建全局配置(默认两个 ja-JP 配置)。 - 预期结果:重建后配置恢复默认状态,可用图形界面重新设置。
六、源码结构与相关入口
如果需要自行构建、翻译或深入行为,可以从以下模块入手:
| 模块 | 职责 |
|---|---|
| LEInstaller/ | 右键菜单扩展的注册/卸载,含管理员提权逻辑 |
| LEProc/ | 启动器,命令行参数解析、代码页计算、进程创建 |
| LEGUI/ | 单程序与全局配置的图形界面 |
| LEContextMenuHandler/ | 资源管理器右键菜单实现 |
| LECommonLibrary/ | 配置读写(LEConfig.cs)、配置项定义(LEProfile.cs) |
- 界面文案与翻译:LEGUI/Lang/DefaultLanguage.xaml、LEContextMenuHandler/Lang/DefaultLanguage.xml,仓库已附带 20 余种语言文件;
- 构建步骤与核心库依赖、LGPL-3.0 许可说明见 README.md;
- README 中指向了官方使用文档与发布下载页面,具体版本以下载包附带说明为准。
按"判断问题类型 → 最小安装 → 单程序配置验证 → 按需加开关"这条路径走,大多数区域不匹配问题在第三步就能定位;如果三步之后现象依旧,优先怀疑字体缺失或程序自身限制,而不是继续叠加 Locale Emulator 的高级选项。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



