本地化 XML 元素

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


有些包含在 description.xml 中的信息可被本地化。当扩展管理器使用它们时会选择最匹配 OpenOffice.org 安装区域的部分。本地化数据可用在

  • 授权协议文件 (simple license,始用于 OOo 2.0.4)
  • 发行者名称和发行者主页的 URL (始用于 OOo 2.4)
  • 发行注释的 URL(始用于 OOo 2.4)


本地化数据通常表现为此种格式:

<parent>
  <child lang="en-US" />
  <child lang="en-GB" />
</parent>


<parent> 的 <child> 元素都拥有一个 lang 属性,为遵循 RFC 3066 标准的表示语言的字符串。目前来说有以下限制:

  • OOo 只使用 lang-country 形式
  • 表示语言的字符串只能有一个变量类型,例如 de-DE-mitte(de 类型:language、DE 类型:region、mitte 类型:variant,即 Language-Region-Variant 形式)
  • OOo 使用大写字母表示国家。表示语言的字符串也必须使用大写字母表示国家。也就是说,OOo的地域和这些元素的地域做比较时是区分大小写字母的。


我们假设 OOo 使用英式英语(en-GB)界面,扩展有两个授权许可文件,一个使用德语(de)和另外一个使用新西兰英语(en-NZ)。显然因为 en-GB 不是 en-NZ 所以没有完美匹配。然后我们自然期望使用 en-NZ 而不是 de。算法会尝试找出最接近 office 安装的地域。这是是算法:


算法输入:

  • <parent> (父元素)
  • Office 安装的地域

需求为:

  • <parent> (父元素)至少有一个 <child> (子元素)
  • 所有 <child> (子元素)有相同元素名和命名空间
  • 所有 <child> (子元素)有 lang 属性


算法输出:

  • <parent> (父元素)的一个 <child> (子元素,并且是直接子元素)。


算法:

  1. Office 安装地域的 language、country 和 variant 部分用来查找匹配的 <child> (子元素)。如果发现完全匹配那么对应的 <child> (子元素)将作为输出然后完成算法。只输出第一个找到的子元素。
  2. Office 安装地域的 language 和 country 部分用来查找匹配的 license-text。如果发现了完全匹配那么对应的 <child> (子元素)将作为输出然后完成算法。
  3. Office 安装地域的 language 和 country 部分用来查找匹配的子元素。这次,我们只尝试匹配 language 和 country 部分。例如,Office 安装地域字串 "en-US"、"en-US-east" 匹配 lang 属性的值 "en-US-north"、"en-US-south" 等等。第一个匹配 lang 属性的子元素将会选择为算法结果输出。如果有匹配即完成算法。
  4. 只用 Office 安装地域的 language 部分来查找匹配的子元素。如果有完全匹配的子元素将作为结果输出然后完成算法。只取第一个匹配项。
  5. 只用 Office 安装地域的 language 部分来查找匹配的子元素。如果有完全匹配的子元素将作为结果输出然后完成。这次,我们尝试只匹配 language 部分。例如,例如,Office 安装地域字串 “en"、"en-US"、"en-US-east" 匹配 lang 属性的值 "en-GB-north"、"en-GB-south" 等等。第一个匹配 lang 属性的子元素将会选择为算法结果输出。如果有匹配即完成算法
  6. 选择第一个子元素作为算法输出。


请注意在 OOo 2.4 版本之前验证<simple-license> 元素的默认子元素的算法是有区别的。作为父元素 <simple-license> 拥有一个 <default-license-id> (IDREF 类型)的属性和一个 <license-text> 子元素,该子元素必须有一个 license-id(ID 类型)属性。这两个属性必须拥有相同的值。这是个校验起来简单但写起来却很麻烦的方案。在 OOo 2.4 中首个子元素被作为默认选择以防万一没有其他与地域项匹配的子元素。这里仍然支持方法但不应该在新扩展中再使用了。当然也推荐那些在旧版本中使用旧方法的扩展在提供新版本扩展时使用新方法


以下示例展示什么值将与 description.xml 相匹配。假设 OOo 的安装地域为 en-US。 The following examples show what values would match with a piece of a description.xml. The locale of OOo is assumed to be en-US.

示例 1:

<simple-license accept-by="user" >
  <license-text xlink:href="lic_en" lang="en" />
  <license-text xlink:href="lic_en-GB" lang="en-GB" />
  <license-text xlink:href="lic_en-US" lang="en-US" />
  <license-text xlink:href="lic_en-US-region1" lang="en-US-region1" />
</simple-license>

将选择带有 lang=”en-US” 值的 <license-text>。属于完全匹配。


示例 2:

<simple-license accept-by="user" >
  <license-text xlink:href="lic_en" lang="en" />
  <license-text xlink:href="lic_en-GB" lang="en-GB" />
  <license-text xlink:href="lic_en-NZ" lang="en-NZ" />
  <license-text xlink:href="lic_en-US-region1" lang="en-US-region1" />
  <license-text xlink:href="lic_en-US-region2" lang="en-US-region2" />
</simple-license>

将选择带有 lang="en-US-region1" 值的 <license-text>。没有找到 "en-US" 所以算法查询其他 "en-US" 的变体并选择第一找到的。


示例 3:

<simple-license accept-by="user" >
  <license-text xlink:href="lic_en" lang="en" />
  <license-text xlink:href="lic_en-GB" lang="en-GB" />
  <license-text xlink:href="lic_en-NZ" lang="en-NZ" />
  <license-text xlink:href="lic_en-region2" lang="en-region2" />
</simple-license>

将选择带有 lang="en" 值的 <license-text>。没有找到 "en-US" 也没有找到相同地域的变体(如:"en-US-region1")。下一步是只比较语言部分。那么有一个 lang="en" 的匹配结果。


Example 4:

<simple-license accept-by="user">
  <license-text xlink:href="lic_de" lang="de" />
  <license-text xlink:href="lic_en-GB" lang="en-GB" />
  <license-text xlink:href="lic_en-NZ" lang="en-NZ" />
  <license-text xlink:href="lic_en-region2" lang="en-region2" />
</simple-license>

将选择带有 lang="en-GB" 值的 <license-text>。 没有找到 "en-US" 也没有找到相同地域的变体(如:"en-US-region1")。只使用语言部分时也没有合适的匹配。那么将不管国家地域和不管变体只要使用语言相同既可。第一个匹配的是 "en-GB"。


Example 5:

<simple-license accept-by="user" >
  <license-text xlink:href="lic_de" lang="de" />
  <license-text xlink:href="lic_de-DE" lang="de-DE" />
  <license-text xlink:href="lic_fr" lang="fr" />
</simple-license>

将选择带有 lang="de" 值的 <license-text>。 这里以 "en" 作为语言的地域都没有,所以只有使用第一项作为默认选择。


Example 6:

<simple-license accept-by="user" default-license-id="de" >
 <license-text xlink:href="lic_es" lang="es" />
 <license-text xlink:href="lic_fr" lang="fr" />
 <license-text xlink:href="lic_de" lang="de" license-id="de" />
</simple-license>

将选择带有 lang="de" 值的 <license-text>。这个示例使用了旧的验证默认地域的机制。从 OOo 2.4 版本开始应不再使用 default-license-id 和 license-id。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages