ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Locale Emulator 完整使用指南:Windows 区域语言模拟器的源码构建与实战

Locale Emulator 完整使用指南:Windows 区域语言模拟器的源码构建与实战

Locale Emulator 完整使用指南:Windows 区域语言模拟器的源码构建与实战

【免费下载链接】Locale-EmulatorYet Another System Region and Language Simulator项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator

Locale Emulator 是一款免费开源的 Windows 系统区域与语言模拟器(System Region and Language Simulator)。它让指定程序以日语、简体中文等目标区域环境启动,全程不改动系统区域设置、无需重启。跟着本文走一遍,你就能在几小时内把它跑起来,并为自己的程序配好专属语言环境。


入手前必读:为什么不直接改系统区域?

想让一个只适配日文环境的程序正常显示,最常见的办法是去"控制面板 → 区域"里切换系统区域设置。但这会带来三个麻烦:设置是全局的,影响电脑上所有程序;改动往往需要重启才能生效;改来改去既繁琐,也容易造成环境混乱。

Locale Emulator 的思路是反过来:不动系统,只把"区域"这一层包装到单个程序上。你配置一次,之后右键一下就能以目标环境运行,跑完即结束,系统本身纹丝不动。


工作原理:把程序装进一个"区域气泡"里

打个比方:系统区域像是整栋楼共用的水电线路,传统做法是整栋楼换线路再重启;Locale Emulator 则是给某间屋子单独接一套临时管线,屋里按新标准运行,其他屋子照常。

落到代码上,这个"气泡"由几部分拼出来:

编码与字符集模拟:LEProc/Program.cs 会按你选的区域算出 ANSI 码页、OEM 码页、LCID 和默认字符集(例如日语对应码页 932、Shift-JIS 字符集),连同时区一起交给核心库创建目标进程。

注册表虚拟化:程序启动时,LEProc/RegistryEntriesLoader.cs 会把InstallLanguage、ACP、OEMCP等语言相关键值按目标区域重算一遍(RedirectRegistry选项,默认开启)。开启高级选项后,还会替换Locale、PreferredUILanguages等系统 UI 语言键。这些替换只发生在被启动的进程内部,系统真实注册表不受影响。

加载核心:真正干活的是 LoaderDll.dll 与 LocaleEmulator.dll 两个核心库,它们独立于本仓库,需要单独构建后复制到构建目录。

各模块职责如下:

模块职责适用场景
LEGUIWPF 图形界面,管理全局与单个应用的区域配置创建、修改、删除配置文件
LEContextMenuHandlerShell 扩展,为文件右键菜单注入 Locale Emulator 项日常一键启动
LEProc核心启动器:计算码页/字符集、做注册表重定向并启动目标程序真正执行模拟运行
LEInstaller注册/卸载 shell 扩展,支持当前用户或全部用户首次部署与卸载
LECommonLibrary配置文件的读取与写入、系统辅助函数各模块共享的基础层
LEUpdater检查并提示新版本后台自动检查更新

源码构建与安装:从 clone 到右键菜单

构建流程来自 README.md,注意第 5 步:核心库在另一个仓库,需要单独获取后复制 dll。

  1. 获取源码:执行git clone https://gitcode.com/gh_mirrors/lo/Locale-Emulator拿到本项目。
  2. 编译本项目:安装 Microsoft Visual Studio 2015 或 2017,打开 LocaleEmulator.sln,执行"生成解决方案"。
  3. 准备核心库:获取 Locale-Emulator-Core 并构建,把LoaderDll.dll和LocaleEmulator.dll复制到本项目的构建输出目录。
  4. 注册右键菜单:运行LEInstaller,普通用户点 Install(写入HKEY_CURRENT_USER),全部用户点 Install All Users(需要管理员,写入HKEY_LOCAL_MACHINE)。
  5. 验证:重启资源管理器或电脑(从旧版本升级时必须要),右键任意.exe应能看到 Locale Emulator 菜单。

提示:核心库的两个 dll 若被杀毒软件隔离,LEProc 会直接提示"Some of the core Dlls are missing"。把相关文件加白名单再重新安装即可。


首次配置:一个 Profile 能做什么

首次运行时,LECommonLibrary/LEConfig.cs 会自动生成全局配置文件LEConfig.xml,并预置两个日语配置:Run in Japanese和Run in Japanese (Admin)——可见项目的"主场"就是日文环境。

每个配置项(Profile)的完整参数如下,都保存在 XML 里:

<Profile Name="日文游戏" MainMenu="false"> <Parameter>启动参数(可为空)</Parameter> <Location>ja-JP</Location> <Timezone>Tokyo Standard Time</Timezone> <RunAsAdmin>false</RunAsAdmin> <RedirectRegistry>true</RedirectRegistry> <IsAdvancedRedirection>false</IsAdvancedRedirection> <RunWithSuspend>false</RunWithSuspend> </Profile>

几个要点:

  • MainMenu决定该配置是否直接出现在右键主菜单里,常用的配置建议勾上 ✅
  • 单个应用另有独立配置文件,就放在程序旁边,名为<程序名>.exe.le.config,由右键菜单的"Modify Application Profile"创建
  • 加载顺序:应用独立配置 → 全局配置中的第一项 → 内置的 ja-JP 默认值,三选一

打开管理界面有两条路:右键任意文件选择"Edit Global Profile List",或命令行执行LEProc.exe -global,都能进入 LEGUI 的配置窗口,选择区域(如ja-JP)、时区并保存即可。


实战场景:右键菜单之外的三种用法

场景一:以指定区域运行某个程序

  • 操作:右键程序的.exe,在 Locale Emulator 菜单下点选某个全局配置(或直接点"Run with Application Profile")。
  • 结果:该程序按所选区域运行,文字、码页、注册表语言值全部按目标区域呈现,系统区域不变。

场景二:批量脚本化多语言测试

  • 操作:LEProc 本身是命令行工具,用-runas配合配置 Guid 指定环境,例如LEProc.exe -runas <配置Guid> "C:\app\test.exe";不带参数直接执行会弹出完整用法说明(按 Ctrl+C 可复制)。
  • 结果:把命令写进脚本,就能并行拉起多个不同区域的实例,逐个比对界面表现,适合做兼容性回归。

场景三:需要参数或管理员权限的程序

  • 操作:右键选"Modify Application Profile",打开该应用的独立配置页,填入Parameter启动参数,勾选"Run as administrator"后保存。
  • 结果:保存的同时会立刻以新配置启动程序,之后双击该.le.config对应的"Run"入口都能带着参数、按管理员权限运行 ⚙️

警告:勾选"Create process with CREATE_SUSPENDED"是调试用途,进程会以挂起状态启动,没有窗口响应,可用 OllyDbg 附加,或用任务管理器结束它。


避坑指南:四个高频问题

右键菜单里没有 Locale Emulator?菜单来自 shell 扩展注册,不是文件缺失。重新运行LEInstaller安装一次,然后重启资源管理器(或电脑)再试。

弹出"core Dlls are missing"错误框?说明LoaderDll.dll、LocaleEmulator.dll不在构建目录或被安全软件清掉了。加白名单、重新复制 dll 再安装。

运行后依然乱码?先核对语言变体是否选对:zh-CN与zh-TW、ja-JP各不相同,码页和字符集跟着变;仍不行再勾选"Fake system UI language"(高级重定向),它会额外替换 UI 语言相关的注册表键值。

升级后菜单点了没反应?安装器的提示里写明:从旧版本升级需要重启电脑(或重启explorer.exe)来释放被锁定的组件 ⚠️


参与社区:翻译、Issue 与 PR

  • 翻译:界面字符串集中在 LEGUI/Lang/DefaultLanguage.xaml 与 LEContextMenuHandler/Lang/DefaultLanguage.xml。仓库里已有 ca、cs、de、ja、ko、ru、zh-CN 等 20 余种语言文件,你可以对照补全自己的语言 📁
  • 报告问题:提交 Issue,附系统版本、Locale Emulator 版本和复现步骤
  • 提交代码:基于LocaleEmulator.sln修改后提 Pull Request。代码采用 LGPL-3.0 许可,若想让改动不受 LGPL 约束,README 中建议先联系作者获取子许可

总结:现在就开始

  • 不改系统区域、不重启,就能让单个程序运行在目标语言环境中
  • 配置一次,长期复用:全局配置 + 每应用独立配置,优先级清晰
  • 右键菜单与LEProc.exe命令行双入口,日常操作和脚本化测试都覆盖
  • 注册表虚拟化只作用于目标进程,系统注册表保持原样
  • 完全免费、LGPL-3.0 开源,社区多语言维护中

行动清单:

  1. 克隆仓库,用 Visual Studio 打开LocaleEmulator.sln完成构建
  2. 获取核心库,把两个 dll 放入构建目录
  3. 运行 LEInstaller 注册右键菜单,重启资源管理器验证
  4. 打开全局配置管理,把默认日语配置改成你真正需要的区域
  5. 右键一个目标程序,选中配置,完成第一次模拟运行

【免费下载链接】Locale-EmulatorYet Another System Region and Language Simulator项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进