应用本地化
DevDuo 桌面应用提供英语和简体中文。语言控件包含跟随系统、English 和简体中文。切换语言时,宿主控件、状态消息、原生外壳标签和应用自带的颜色实验室会就地更新,不会重新加载或替换已加载的 WebView。
选择与持久化
初始选项为跟随系统。应用启动时,根据操作系统的界面区域性确定语言:
| 系统界面区域性 | 应用语言 |
|---|---|
中文,包括 zh、zh-CN、zh-SG 和 zh-Hans 区域性 | 简体中文 |
名称包含 Hant,或为 zh-TW、zh-HK、zh-MO | 英语 |
| 其他区域性,包括固定区域性 | 英语 |
手动选择英语或简体中文优先于系统设置。跟随系统使用启动时读取的界面区域性;修改操作系统界面语言后,应重启应用。
偏好设置位于当前用户的 .NET LocalApplicationData 目录下的 DevDuo/preferences.json,与仓库配置和浏览器配置文件分开。JSON 包含 schemaVersion: 1,以及值为 system、en 或 zh-Hans 的 language。写入通过临时文件替换完成。读取器仅接受包含整数 schemaVersion: 1 和字符串 language 的 JSON 对象,允许额外字段。非对象根节点、缺失或不支持的版本、缺失或非字符串语言字段均回退到跟随系统,并显示本地化说明。未知的语言字符串也回退到跟随系统。偏好文件不存在时跟随系统;无法读取或文件损坏时也会回退,并显示说明。如果保存失败,所选语言仍在本次会话生效。偏好设置错误显示在材质设置的消息区域。
资源与修改方式
嵌入式扁平 JSON 资源位于 src/DevDuo/Localization/en.json 和 src/DevDuo/Localization/zh-Hans.json。AppLocalization.cs 负责语言解析、显示文本格式化和偏好存储。英语为回退资源;未知资源语言回退到英语,若当前资源和英语资源均没有某个键,则显示键名本身。
修改应用文本时:
- 在两份资源中新增或修改相同的键,所有翻译均应非空。
- 保留带编号的格式占位符及格式说明,例如
{0}和{3:F0}。用户可见消息通过AppLocalization.Format格式化,以使用所选语言的区域性。 - 宿主控件通过
MainWindow的本地化刷新注册更新。刷新标签时保留已选值。 - 原生外壳标签使用
Shell.*键,通过独立的uiLanguage和uiStrings显示选项传入。保持 Swift 和 Windows 的键引用同步。开发者页面的实际标题和主机名保留原文。 - 应用自带颜色实验室通过
Fixture.*键及Fixtures/color-scroll.html中的data-i18n属性标记文本。首次载入和后续更新均设置 HTML 语言。就地翻译通过专用演示页标记限制范围,并保留已选择的主题色提示。
应用自身的验证、加载、保存和初始化说明会翻译。操作系统或浏览器提供的异常详情保留原始语言,外层说明使用所选语言。即使浏览器初始化失败,Windows WebView2 的初始化说明也能随语言选择更新。
测量边界
应用界面本地化与实测场景数据分离。语言控件仅修改显示字符串,并重新配置现有原生容器;不会修改配置 ID、机身旋转、场景映射、遮罩、逻辑尺寸、视口预留、标签页框、裁剪或场景字号。八个机身姿态/折叠映射和 24 个 Safari 初始/滚动参考状态保持不变。
已知遥测值仅在宿主状态显示中翻译。保存的 JSON 和页面遥测保留规范键名、标识符、引擎名称及来源值。新增的 uiLanguage 和 uiStrings 是序列化容器选项中的显示元数据,也会出现在 materialParameters 下。应用语言选择器不会翻译任意开发者页面或校准页面,也不会伪造 iPhone 浏览器 API 或设备属性。
模拟标签页的译文沿用实测槽位和截断方式。切换语言可以改变槽位中的文本长度,但不得改变实测几何。应用自带颜色实验室的译文可以重新排版;它与规范校准页面和参考场景分开。
验证与限制
运行 mise exec -- just test 执行可移植测试,其中包含无外部测试框架依赖的 .NET 本地化检查。也可直接执行:
mise exec -- dotnet run --project tests/DevDuo.Localization.Tests -p:RestoreLockedMode=true检查程序直接链接实际的本地化、配置、场景和容器选项源码,验证资源键与占位符一致性、非空文本、格式化、回退、显式/系统语言解析、偏好重启/损坏/写入失败行为、演示页键覆盖、全部八个映射和 24 个状态,以及不同语言载荷下实测选项值不变。它使用仓库管理的 .NET SDK,无需额外测试运行器。
编译和可移植测试不能证明原生运行时正确性。macOS 需要另行验证页面已加载及滚动后的语言切换、原生辅助功能标签、模式/设备选择保留、颜色实验室、保存/错误消息和重启后的偏好恢复。比较切换前后的视口和原生框遥测。Windows 也需要相同的运行时检查,另需覆盖 WebView2 错误路径、输入和 DPI 行为。仅通过 Windows 交叉编译不能证明这些运行结果。参见 Windows 交接及验证。