9 个不稳定版本 (3 个破坏性更新)

0.3.0 2024年5月2日
0.2.2 2024年4月26日
0.1.2 2024年4月26日
0.0.2 2024年4月25日

204WebAssembly

Download history 252/week @ 2024-04-27 17/week @ 2024-05-04 12/week @ 2024-05-18 1/week @ 2024-05-25 5/week @ 2024-06-29 31/week @ 2024-07-06

每月下载 407 次

MIT 许可证

120KB
3.5K SLoC

nile-library - 支持尼罗的库

该仓库包含支持 OpenTTD 翻译工具 nile 的库。

例如,此库验证翻译是否适用于给定的基本字符串,并将基本字符串转换为可翻译的形式。

安装

已安装 Rust 工具

开发

为了方便本地开发

  • 验证基本字符串
    cargo run -- <base>
    
  • 验证翻译字符串
    cargo run -- <base> <translation>
    

它将输出规范化的字符串形式,以及字符串是否有效;如果不是,将指出错误。

WASM 集成

此工具还与 WASM 集成,因此可以在任何网站上执行验证。为此使用 wasm-pack

wasm-pack build --release

API 使用

步骤 1: 验证和规范化基本字符串

API 方法

fn validate_base(config: LanguageConfig, base: String) -> ValidationResult

输入

  • config.dialect: openttdnewgrfgame-script 之一。
  • config.cases: 基础语言的空值。
  • config.genders: 基础语言的空值。
  • config.plural_count: 基础语言为 2
  • base: 要验证的基本字符串

输出

  • errors: 错误列表。如果此列表不为空,则不应将字符串提供给翻译者。
  • normalized: 供翻译者显示的规范化文本。
    • 在规范化文本中,如 RAW_STRINGSTRING5 等字符串命令被替换为 STRING
    • 翻译者可以将规范化文本作为翻译模板复制。

示例

>>> cargo run "{BLACK}Age: {LTBLUE}{STRING2}{BLACK}   Running Cost: {LTBLUE}{CURRENCY}/year"
ERROR at position 61 to 71: Unknown string command '{CURRENCY}'.

>>> cargo run "{BLACK}Age: {LTBLUE}{STRING2}{BLACK}   Running Cost: {LTBLUE}{CURRENCY_LONG}/year"
NORMALIZED:{BLACK}Age: {LTBLUE}{0:STRING}{BLACK}   Running Cost: {LTBLUE}{1:CURRENCY_LONG}/year

步骤 2: 翻译者翻译字符串

  • 翻译者必须提供默认情况的文本。
  • 其他情况是可选的。
  • 游戏脚本不支持情况。在 LanguageConfig 中有一个方法可以测试此,但尚未导出。

步骤 3: 验证和规范化翻译字符串

API 方法

fn validate_translation(config: LanguageConfig, base: String, case: String, translation: String) -> ValidationResult

输入

  • config.dialect: openttdnewgrfgame-script 之一。
  • config.cases: 来自 nile-configcase
  • config.genders:来自 nile-configgender
  • config.plural_count:来自 nile-config 的复数形式数量。
  • base:翻译所针对的基准字符串。
  • case:翻译的格式。使用 "default" 表示默认情况。
  • translation:翻译者输入的文本。

输出

  • errors:错误列表。
    • severity:错误的严重程度。
      • error:翻译已损坏,不得提交到 OpenTTD。
      • warning:翻译可以提交,但翻译者仍应修复它。这用于新的验证,Eints 没有执行。因此,可能存在大量违反规定的现有翻译。
    • position:输入字符串中的字节位置。如果是一般消息且没有位置,则 None
    • message:错误信息。
    • suggestion:一些带有提示的扩展消息。
  • normalized:提交的规范化文本。在规范化文本中,已删除尾随空格和其他垃圾。

示例

>>> cargo run "{BLACK}Age: {LTBLUE}{STRING2}{BLACK}   Running Cost: {LTBLUE}{CURRENCY_LONG}/year" "{BLUE}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{0:CURRENCY_LONG}/Jahr"
ERROR at position 61 to 78: Duplicate parameter '{0:CURRENCY_LONG}'.
ERROR at position 61 to 78: Expected '{0:STRING2}', found '{CURRENCY_LONG}'.
ERROR: String command '{1:CURRENCY_LONG}' is missing.
WARNING: String command '{BLUE}' is unexpected. HINT: Remove this command.

>>> cargo run "{BLACK}Age: {LTBLUE}{STRING2}{BLACK}   Running Cost: {LTBLUE}{CURRENCY_LONG}/year" "{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY_LONG}/Jahr"
NORMALIZED:{BLACK}Alter: {LTBLUE}{0:STRING}{BLACK} Betriebskosten: {LTBLUE}{1:CURRENCY_LONG}/Jahr

依赖项

~4.5–6.5MB
~106K SLoC