Skip to content

[Feature] 增强启动器的本地化支持 #4373

Description

@Glavo

概述 | Summary

增强 HMCL 的本地化能力,允许用户(尤其是整合包作者)为不同语言的用户配置 HMCL 和实例。

原因 | Reason

便于整合包作者为不同语言的用户配置 HMCL 和实例。

详情 | Description

目前 HMCL 难以为不同语言的用户配置启动器和实例。我希望以以下方式增强 HMCL,使用户可以更方便地为不同语言的用户提供不同配置。

  1. 创建一个新的类 LocalizedText,并将配置文件中可能带有本地化文本的 String 替换为 LocalizedText

    LocalizedText 本质上是一个 Map<String, String>,而 HMCL 会在其中寻找最适合当前语言环境的文本。
    例如,如果当前语言环境为 zh-CN,那么 HMCL 会按顺序寻找以下键对应的值:

    • zh-Hans-CN
    • zh-Hans
    • zh-CN
    • zh
    • default

    LocalizedText 在 JSON 中也支持两种序列化形式:

    • 简单模式:LocalizedText 被序列化为单一 String,对所有语言环境生效,与旧版本的配置完全兼容
    • 复杂模式:LocalizedText 被序列化为 JsonObject

    对于处于复杂模式的 LocalizedText 值,我们可以让它对应的 TextField 在 HMCL 中处于只读模式,仅展示匹配当前语言环境的值,而用户需要在外部编辑器中才能创建和编辑这种类型的值,避免引入额外的复杂度。

  2. 支持本地化一些资源。
    例如,HMCL 现在支持在 ./.hmcl 中放置 font.{ttf,otf,woff} 字体文件作为启动器的默认字体。但是,单个字体可能无法同时覆盖多个语言的用户。因为 CJK 统一表意文字的存在,使用中文字体可能会扭曲日文中汉字的字形,使用日文字体则会扭曲中文的字形。我们可以通过允许用户为不同语言的用户嵌入不同字体来避免这个问题。
    对于语言环境为 zh-CN 的用户,我们可以新增以下字体搜索路径:

    • ./.hmcl/font/font_zh_Hans_CN.{ttf,otf,woff}
    • ./.hmcl/font/font_zh_Hans.{ttf,otf,woff}
    • ./.hmcl/font/font_zh_CN.{ttf,otf,woff}
    • ./.hmcl/font/font_zh.{ttf,otf,woff}
    • ./.hmcl/font/font.{ttf,otf,woff}
      而如果他想为 lzh(文言文)配置额外的繁体字体,那么他可以通过添加 ./.hmcl/font/font_lzh.ttf 文件来避免干扰到简体环境的字体。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions