开发可本地化的清单

W3C 小组说明

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2025/NOTE-localizable-manifests-20250214/
最新发布版本:
https://www.w3.org/TR/localizable-manifests/
最新编辑草案:
https://w3c.github.io/localizable-manifests
历史:
https://www.w3.org/standards/history/localizable-manifests/
提交历史
编辑:
Addison Phillips (特邀 专家)
反馈:
GitHub w3c/localizable-manifests (拉取请求, 新议题, 开放议题)

摘要

本文档提供了与 Web 上清单文件及 类似文档格式规范相关的定义和最佳实践。

本文档状态

本节描述的是本文档 在发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 技术 报告索引中找到,网址为 https://www.w3.org/TR/。

Web 上的一些规范涉及定义要一起使用的一组文件或资源。一个 常见的设计模式是提供一个清单或配置文件,用于定义哪些资源 可用,以及应如何使用各种资源,或者提供关于 资源集合的各种元数据。本文档提供了与 Web 上清单文件及类似文档格式规范 相关的定义和最佳实践。

本文档由 国际化 工作组作为 小组说明使用 说明轨道发布。

本小组说明得到 国际化工作组的认可,但并未得到 W3C 本身或其 成员的认可。

这是一个草案文档,可能随时被其他 文档更新、替换或废弃。不应将本文档作为 进行中的工作以外的内容来引用。

W3C 专利 政策 不对本文档附带任何许可要求或承诺。

本文档受 2023年11月03日 W3C 流程文件约束。

1. 引言

Web 上的一些规范涉及定义要一起使用的一组文件或资源。一个 常见的设计模式是提供一个清单或配置文件,用于定义哪些资源 可用,以及应如何使用各种资源,或者提供关于 资源集合的各种元数据。

此类规范的一些示例包括 Webapp [APPMANIFEST]、Miniapp [MINIAPP-MANIFEST] 和 ePub [EPUB-33]。

清单文件格式通常包含不可本地化的语法内容用户提供的 值。但大多数清单文件格式也至少包含一些可本地化 内容字段。定义包含可本地化 内容值的清单文件格式的规范,需要为用户提供一种将清单本地化为不同语言的方法。本文档介绍了常见设计的利弊,以及与构建和 管理清单相关的一些最佳实践。

这些(以及许多其他)最佳实践,以及指向支持材料的链接,也可以在 面向规范开发者的国际化最佳实践 [INTERNATIONAL-SPECS] 中找到。除了 此处的最佳实践之外,与 Web 上语言元数据相关的其他最佳实践 可在 [STRING-META] 中找到。核心 术语也可在国际化术语表 [I18N-GLOSSARY] 中找到。

2. 用例

清单文件在 Web 上可能有不同的使用方式,这些方式会影响清单 本地化策略的选择。

打包清单。 一些清单会 与其他文件打包在一起,以形成应用程序或文档。由于清单通常作为 更大内容集的一部分被使用,并且该内容作为单个单元下载,因此这类清单可以 使用更模块化的本地化策略,例如使用基于 区域设置的名称或路径的多个文件。

简写描述 清单。 一些清单旨在用作应用程序、 文档或其他资源的简写描述。这类清单通常由客户端下载,有时作为 获取实际资源或其组成部分的先导。由于获取多个文件会 带来延迟、大小和存储方面的影响,因此这类清单通常会寻求使用单个文件或其他 较不模块化的方法。

2.1 管理语言偏好

另一个考虑因素是规范采用的语言协商 策略。如果清单可以按需生成(而不是缓存在一个众所周知的 URL 上),那么 本地化可以按请求应用。这更倾向于一种简写清单风格。在其他情况下,如果某些 实现可能能够协商,而另一些则不能,那么规范允许使用不同策略 可能很重要。

请记住,现代操作环境支持非常广泛的可用区域设置集, 而应用程序所有者通常希望通过单个本地化的应用程序或 文档来满足多样化受众。虽然规范中的示例必然限制在大约三到四个区域设置, 但实际应用程序具有 50 个或更多特定区域设置并不罕见。

清单需要将用户的语言偏好与可用的本地化资源相匹配。用户的 区域设置偏好可以包含的不仅仅是主要语言子标签。它可能包含文字(在 zh-Hans 这样的标签中,表示“以简体汉字书写的中文”)或地区 (在 fr-CA 这样的标签中,表示“加拿大使用的法语”)——或两者兼有。一些系统支持 Unicode 区域设置 标识符,它是 [BCP47] 的一个扩展,包含 日历、数字成形、排序规则等定制。有关更多信息,请参见 [LTLI]。

2.1.1 匹配 语言标签和区域设置回退

将本地化资源与用户的区域设置偏好相匹配通常涉及“区域设置回退”,即使用 一种机制,例如 [BCP47] 的“lookup”匹配方案或 [CLDR] 的“best match”方案。这些 机制会比较每个资源上的语言标签,寻找 与用户偏好完全匹配的最长标签。通常还会有一个 默认区域设置,用于没有任何本地化资源与用户 偏好匹配的情况。

将语言标签匹配到可用资源(例如在5. 路径与 文件名称本地化中找到的资源)或匹配到某种语言映射中的项目(参见3.4 语言映射)可能要求实现检查所有 可用值,因为第一个潜在匹配可能并不是总体上最好的匹配。

例如,考虑以下语言映射:

"localized-resource": {
	"en":     {"value": "This is English"},
	"en-GB":  {"value": "This is UK English"},
	"en-US":  {"value": "This is US English"}
}

如果用户的区域设置偏好是 en-GBen-US,则最佳匹配包含在列表中。显然, 必须读取整个列表才能找到最佳匹配,因为 en 项 可以被视为匹配任一值。

如果用户的区域设置偏好是 en-AE(阿拉伯联合 酋长国使用的英语),则列表中的最佳匹配是 en,不过一些最佳 匹配实现可能会应用带外信息来潜在地匹配更长的标签。

如果用户的区域设置偏好是 fr-FR(法国使用的法语),则没有任何 值匹配,需要某种形式的默认处理来选择要使用的值。

最后,用户的区域设置偏好可能包含额外的子标签,例如用于定制 区域设置的子标签,或语言变体。一个定制区域设置的示例可能是 en-US-u-hc-h23(美国英语,但将“小时周期”设置为 24 小时制)。一个 语言变体的示例可能是 en-GB-oxendict(英国英语,但使用 牛津英语词典的拼写约定)。

区域设置回退的实现方式是,将用户的偏好与可用值列表 进行匹配;如果没有找到精确匹配,则移除最后一个子标签并重复。这在 [BCP47] 的语言标签匹配部分中被描述为“lookup” (具体见 [RFC4647])。因此,标签 en-GB-oxendict 将按如下方式与上述语言映射进行比较:

en-GB-oxendict  // no match
en-GB           // matches en-GB
en              // if en-GB were not present, matches en
(default)       // no match, use defaults

3. 指示语言和方向

清单中存储的自然语言 值,与任何文档格式或数据结构一样,需要语言和方向 元数据,才能被使用者成功使用。有关需求的详细 信息,请参见 [STRING-META]。

清单中的字符串值有四种常见的序列化方式,本 节对它们进行了描述。规范应将这些方式结合使用,以形成完整的本地化解决方案。

3.1 非语言字段

对于非语言字段(即 包含非人类语言数据的字符串),不应将语言或方向元数据与该值关联。请注意,这包括 应用程序内部数据 值 [INTERNATIONAL-SPECS]。

如果使用者需要 为数据分配语言标签,则使用值 zxx(非语言)。如果使用者需要为数据分配基 本方向,则使用值 auto

3.2 单语言 可本地化文本字段

对于以单一语言出现的可本地化 文本字段,使用一种数据结构来表示该值。推荐的 表示是一个包含三个字段的对象。字段 value 包含 实际字符串。字段 lang 包含一个有效的 [BCP47] 语言标签。字段 dir 包含字符串的基本方向(值为 ltrrtlauto 之一)。

参见 [STRING-META] 中的 可本地化 WebIDL 字典

3.3 文档级默认值

如果给定文档中只有少量自然语言 字符串,单语言可本地化文本字段最为适用。当诸如清单之类的文档包含许多自然语言字符串时, 这种方式会变得低效。为了降低编码这些字符串的复杂性,一种变通方法是 为语言和基本方向建立文档级默认值。它们是独立的值,因为 语言并不暗含方向。仍应能够通过使用可本地化文本字段的单语言 表示法来覆盖任何给定字符串值上的任一值,该表示法见上文

对于可以使用 [JSON-LD] @context 机制的规范,请使用 @language@direction 字段来提供文档级默认值。

如果你的规范定义了自己的文档级默认值,请提供两个可选字段:

3.4 语言映射

世界并非单语。让文档只包含单一语言将意味着需要提供 该文档的许多迭代版本,每种语言一个版本,以便本地化清单。这还 可能需要在请求清单时进行语言协商。

解决此问题的一种方式是允许清单文档内的每个可本地化文本字段具有 多语言值。

语言选择并不仅仅是将语言标签字符串值与用户首选的 区域设置进行精确匹配。对象表示法通常用于表示可本地化 文本字段,它要求先反序列化对象,才能发现与该值关联的语言标签。 当给定清单文件中有许多值时,这可能效率低下。 在这些情况下,最佳实践是使用语言映射来组织可本地化文本值。这样的 映射会暴露语言标签以供选择,但在映射的值一侧仍使用对象表示法, 因为对于给定的字符串值,可能需要覆盖语言和方向。

4. 常见方法

创建本地化清单有几种常见方法。每种方法都有一些优势(也 存在一些缺点):

4.1 单一清单文件

单一清单方法通过使用语言值数组定义可本地化字段,来提供 本地化能力。

单一清单的优势包括:

  1. 清单是单个文件,便于下载。
  2. 更容易确保正在使用每种语言的正确资源版本。
  3. 语言默认处理可能更容易管理。

这种方法也有缺点:

  1. 如果清单被呈现为许多语言,文件大小可能会不成比例地增长。
  2. 本地化流程通常经过优化,用于创建原始文件的副本,只是 替换其中承载语言的材料。在一个高度多语言的文件中创建、管理和同步本地化 可能比为每种语言使用单独文件更复杂。通过脚本或工具生成 清单是管理这种复杂性的一种方法。

单一清单最适合源文件较小、可本地化内容字段数量有限 和/或语言数量有限的情况。大多数单一清单都会定义某种“语言索引” 方案(例如 [JSON-LD] 中的方案)来执行实际选择。

4.2 特定于语言或 区域设置的清单文件

特定于区域设置的清单会为每种受支持的语言或区域设置创建单独文件。通常, 规范会选择基于 pathfilename 的组织方案来分配和查找清单文件。

特定于区域设置的清单的优势包括:

  1. 管理区域设置的创建或添加通常更容易。本地化流程 通常针对“创建给定源文件的本地化副本”进行了优化。

缺点包括:

  1. 即使是简单的区域设置回退链,也可能要求客户端搜索或获取多个文件。
  2. 由于文件是分开的,必须严格控制内容的版本管理。
  3. 可能需要测试更多变体,以确保正常运行。

4.3 混合方法

一种常见的折中方案是设置一个中央清单文件,其中包含大部分或全部不可本地化 内容,并配合包含可本地化内容的单独文件。在某些情况下,中央 清单文件包含可本地化内容的默认值。中央清单还可能包含 可用区域设置的目录或列表(或特定于语言的清单的 URL),以便客户端只 需要尝试获取实际可用的本地化文件。

5. 路径与文件名 本地化

一些清单选择通过修改路径来存储清单的本地化变体。另一些则倾向于 修改文件名。

基于路径的存储的优势在于,可以将多个文件一起本地化。例如, 本地化清单可以包含本地化图标、徽标、样式表、README 和服务条款文件, 并与清单放在一起。可以通过添加新目录来添加新语言。

基于路径的系统的缺点是,文件名通常“全都一样”,并且 给定文件的内容无法从文件名看出——只能通过其在应用程序层次结构中的位置看出。

基于文件名的存储的优势在于,文件内容可以从文件名明显看出,并且 在这方面管理文件有时会更容易。

6. 其他考虑事项

请注意,清单本地化并不会消除清单中的字符串内容为每个单独数据值提供 语言和方向元数据的需要。清单文件可以为语言和方向定义文件范围的 默认值,但具体文件应能够覆盖任一值。有关更多 信息,请参见 [STRING-META]。

一些清单允许在本地化文件中“稀疏填充”值。例如, en-US(英语,美国)文件可能只包含一两个美国特定值,而 其大部分内容依赖 en(英语)文件。规范需要明确说明 是否允许稀疏填充以及其工作方式,以避免配置错误或缺失 翻译。

A. 参考文献

A.1 资料性参考文献

[APPMANIFEST]
Web 应用清单. Marcos Caceres; Kenneth Christiansen; Diego Gonzalez-Zuniga; Daniel Murphy; Christian Liebel. W3C. 2025年2月7日. W3C 工作草案. URL:https://www.w3.org/TR/appmanifest/
[BCP47]
用于标识语言的标签. A. Phillips, Ed.; M. Davis, Ed. IETF. 2009年9月. 最佳现行实践. URL:https://www.rfc-editor.org/rfc/rfc5646
[CLDR]
Unicode 通用区域设置数据仓库. Unicode Consortium. URL:https://cldr.unicode.org/
[EPUB-33]
EPUB 3.3. Ivan Herman; Matt Garrish; Dave Cramer. W3C. 2025年1月7日. W3C 推荐标准. URL:https://www.w3.org/TR/epub-33/
[I18N-GLOSSARY]
国际化术语表. Richard Ishida; Addison Phillips. W3C. 2024年10月17日. W3C 工作组说明. URL:https://www.w3.org/TR/i18n-glossary/
[INTERNATIONAL-SPECS]
面向规范开发者的国际化最佳实践. Richard Ishida; Addison Phillips. W3C. 2024年10月17日. W3C 工作组说明. URL:https://www.w3.org/TR/international-specs/
[JSON-LD]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 2020年11月3日. W3C 推荐标准. URL:https://www.w3.org/TR/json-ld/
[LTLI]
万维网的语言标签和区域设置标识符. Addison Phillips. W3C. 2020年10月7日. W3C 工作草案. URL:https://www.w3.org/TR/ltli/
[MINIAPP-MANIFEST]
MiniApp 清单. Martin Alvarez-Espinar; Yongjing ZHANG. W3C. 2025年1月28日. W3C 工作草案. URL:https://www.w3.org/TR/miniapp-manifest/
[RFC2119]
用于 RFC 以指示要求级别的关键词. S. Bradner. IETF. 1997年3月. 最佳现行实践. URL:https://www.rfc-editor.org/rfc/rfc2119
[RFC4647]
语言标签匹配. A. Phillips, Ed.; M. Davis, Ed. IETF. 2006年9月. 最佳现行实践. URL:https://www.rfc-editor.org/rfc/rfc4647
[RFC6067]
BCP 47 扩展 U. M. Davis; A. Phillips; Y. Umaoka. IETF. 2010年12月. 资料性. URL:https://www.rfc-editor.org/rfc/rfc6067
[STRING-META]
Web 上的字符串:语言和方向元数据. Richard Ishida; Addison Phillips. W3C. 2024年10月17日. W3C 工作 组说明. URL:https://www.w3.org/TR/string-meta/