w3strings 编码器 NG

w3strings 编码器 NG

w3strings 编码器 开源版本

虽然原始的 w3strings 编码器是一款出色的工具,但作为闭源的仅限 Windows 的可执行文件,它存在一些限制:

  • 只能在 Windows 系统上使用。
  • 源代码不可用,因此无法嵌入或集成到其他工具中。

为了解决这个问题,我们参考了 WolvenKit 项目中 w3strings 二进制文件的加载和解析逻辑,并将其重写为一个开源的 Rust 库和命令行工具。

特别感谢原始 w3strings 编码器的作者 rmemr 以及 WolvenKit 团队。


w3strings-rust (w3strings-ng)

一个快速、安全且开源的 Rust 库和 CLI 工具,用于编码和解码《巫师 3》的本地化文件(.w3strings / .wstrings)。

■ 主要特性

  • 跨平台支持: 在 Windows、macOS 和 Linux 系统上无缝运行和构建。
  • 开源且可嵌入: 设计为库的形式,易于集成到其他 Rust 项目、自定义模组工具或构建流程中。
  • 快速且安全: 利用 Rust 的内存安全性和高性能特性,能够即时处理大型本地化文件。
  • 自动密钥恢复: 自动搜索并加载字典文件(w3strings.txt 或 vanilla.w3strings.txt),以在解码过程中恢复原始字符串键(例如 panel_Mods)。

■ CLI 使用方法

该工具通过命令行执行。

1. 解码 (.w3strings ➔ .csv) 将二进制本地化文件转换为可编辑的 CSV 文本文件。

w3strings-ng decode <path_to_w3strings> <path_to_output_csv>

示例:

w3strings-ng.exe decode en.w3strings en.w3strings.csv

※ 将 w3strings.txt 或 vanilla.w3strings.txt 放置在活动目录、目标文件目录或工具目录中,可自动将哈希值解析回原始字符串键(key(str))。

2. 编码 (.csv ➔ .w3strings) 将编辑后的 CSV 文件编译回适用于游戏的加密二进制格式。

w3strings-ng encode <path_to_csv> <path_to_output_w3strings>

示例:

w3strings-ng.exe encode en.w3strings.csv en.w3strings

■ CSV 格式规范

CSV 文件使用竖线 (|) 作为分隔符,并遵循以下结构:

;meta[language=en]
; id      |key(hex)|key(str)| text
174131|77971da9||Stamina damage
2114127085||panel_Mods|Mods
  • 第 1 行: 语言元数据(例如 ;meta[language=en] 或 ;meta[language=jp])。
  • 第 2 行: 列标题(固定格式)。
  • 第 3 行及以后: 记录行,格式为:<ID>|<key_hex>|<key_str>|<localized_text>。

■ 对于开发者(Crate 集成)

要在您自己的 Rust 项目中将其作为库使用,请在您的 Cargo.toml 中添加以下内容:

[dependencies]
w3strings = "0.1.5"

示例代码:

use std::collections::HashMap;
use std::fs;
use w3strings::decode;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let binary_data = fs::read("en.w3strings")?;
   
    // 可选字典,用于将哈希值映射回键字符串(例如 "panel_Mods")
    let mut hash_dict = HashMap::new();
    hash_dict.insert(w3strings::hash_key("panel_Mods"), "panel_Mods".to_string());
   
    let csv_content = decode(&binary_data, &hash_dict)?;
   
    fs::write("en.w3strings.csv", csv_content)?;
    Ok(())
}

■ 许可证与致谢

  • 本项目采用 MIT 许可证 授权。
  • 基于 rmemr(w3strings encoder 的作者)的原始概念和逻辑。
  • 实现参考了 WolvenKit 项目的 C# 代码库。

支持我

在 Ko-fi 上支持我的工作