Locale Emulator

关注
义项:区域模拟工具
Locale Emulator

Locale Emulator(区域模拟工具)是一款面向Windows平台的开源区域与语言模拟工具,简称LE,由开发者xupefei(徐培飞)创建并在2014年首次发布[1]。它能在不修改系统全局区域设置的前提下,让单个应用程序以指定的语言、区域和时区环境运行,主要用来解决非Unicode程序在异地区域设置下出现的文字乱码问题[2]。该工具以进程注入和API钩子为核心机制,常用于运行要求日语等特定区域环境的日系游戏与老旧软件[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Locale Emulator 是一款运行在 Windows 系统上的开源区域模拟工具,简称 LE[1]。其作用对象是单个可执行程序,而不是整个操作系统:它让目标程序在启动时获得一套虚拟的语言标识、代码页和时区参数,从而认为自己正运行在另一个国家或地区的系统环境中[4]。工具本身并不翻译软件界面,也不提供汉化功能,它处理的只是程序运行所依赖的区域与编码条件[5]。

该工具的定位是微软早期 AppLocale 组件以及 NTLEA 等同类方案的替代品。由于微软在 Windows 8 之后不再提供 AppLocale,依赖特定区域设置的旧程序在较新系统上容易出现显示异常,Locale Emulator 便在这一背景下被广泛采用[6]。

原理

问题的根源在于 Windows 的非 Unicode 程序使用 ANSI 代码页解释字符数据,而系统同一时刻只能启用一个代码页。例如简体中文系统默认使用 GBK,而日文程序通常按 Shift-JIS 编码处理文本,两者不一致时字符会被错误解析为无效字节,显示为乱码或方框[7]。

Locale Emulator 通过进程注入与 API 钩子改变这种继承关系。程序启动前,加载器把核心模拟模块注入目标进程,并在进程内拦截 GetSystemDefaultLCID、GetUserDefaultUILanguage、SetThreadLocale 等区域相关接口,使其返回预先设定的区域标识,如日语的 $0x0411$[8]。同时,工具对注册表中与区域有关的查询做重定向,让目标程序读到的日期、时间、货币格式与代码页参数均来自虚拟环境[9]。

模拟范围覆盖 32 位与 64 位可执行文件,通过分离的注入模块分别适配,因此不会因为程序位数不同而失效[8]。用户通过图形界面组件 LEGUI 创建配置档案,档案可指定区域、代码页、时区以及是否伪造系统显示语言等参数,再由 LEProc 负责按该档案创建进程[1]。


flowchart LR

A[用户右键可执行文件] --> B[LEProc 读取配置档案]

B --> C[设置注册表重定向与区域参数]

C --> D[向新进程注入模拟模块]

D --> E[拦截区域相关 API 调用]

E --> F[目标程序以虚拟区域环境运行]

发展历程

该工具由开发者 xupefei 创建,2014 年首次发布于 GitHub,最初的项目名称为 LEGUI,后改称 Locale Emulator,源代码以 LGPL-3.0 协议开放。项目采用核心库与主程序分离的结构,核心部分单独放在 Locale-Emulator-Core 仓库中,编译时需将核心动态库复制到主程序目录。

版本演进与 Windows 系统更新紧密相关。2.0 版本针对 Windows 10 的发布做了兼容处理[10];2.4.0.0 版本增加了对 Windows 10 1903 的支持,并允许为计算机上的所有用户安装[11];2.4.1.0 版本补充了挪威语、土耳其语、荷兰语、波兰语和印度尼西亚语界面翻译[12];2.5.0.1 版本则修正了图形界面组件无法启动应用程序的问题[13]。2022 年 4 月,该项目的 GitHub 仓库被作者归档,转为只读状态[11]。

应用

最典型的用途是运行区域设置与当前系统不一致的游戏。日系单机游戏、视觉小说等作品常按日语环境开发,在简体中文或英文系统下直接启动会出现文字乱码、界面错位甚至无法运行,通过该工具指定日语配置即可正常显示[3]。类似情况也出现在韩语游戏和繁体中文软件上,用户可在配置中选择对应的区域与代码页[14]。

除游戏之外,工具还用于企业和个人环境中的老旧软件。部分早期财务软件、生产类工具或行业程序把代码页写死在程序中,迁移到新电脑后界面文字无法识别,指定相应区域即可恢复可读[15]。开发者与测试人员也借助它复现其他地区的区域环境,用于验证软件在不同区域下的显示与格式处理是否正确[2]。

局限

该工具只调整区域与编码环境,不能替代翻译。程序界面中原本为日文或其他语言的文字,在模拟后仍然是原文,需要汉化补丁另行处理[5]。如果程序自身强制校验系统区域,或把编码解析逻辑写死在代码中,模拟可能不生效,仍会显示乱码[7]。

对系统组件的依赖也会带来失败情况。目标程序若缺少所需字体,文字可能显示为方框,需额外安装日文字体后才正常[9]。部分安全软件可能拦截其注入行为,导致加载失败,需要调整相关防护设置或添加例外[16]。此外,如果系统中与区域相关的注册表项被清理工具删除,运行时会报出找不到时区的错误[17]。

工具解决的是区域设置层面的兼容问题,对源于操作系统版本本身的兼容缺陷无能为力。例如某些旧引擎在新版 Windows 上无法运行,仍需借助虚拟机或安装对应补丁[5]。

参见

  • 代码页 —— 决定非 Unicode 程序如何解释字符字节的映射表,是乱码问题的直接原因。

  • Unicode —— 统一字符编码标准,与 ANSI 代码页机制形成对比。

  • API 钩子 —— 该工具改变目标进程区域行为所依赖的核心技术手段。

  • 进程注入 —— 将模拟模块加载进目标程序地址空间的方式。

  • Windows —— 该工具所运行的操作系统平台。

  • 虚拟机 —— 当区域模拟无法解决兼容问题时常用的替代方案。

词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:05:03Z

历史版本

本条目引用的词条
代码页 Unicode API 钩子 进程注入 Windows 虚拟机