locres 編集

翻訳すべきデータは EthanCarter\Content\Localization\Game\en\Game.locres にある。

locres の構造
struct Locres {
    namespace_count: i32,
    namespaces: Vec<Namespace>,
}
struct Namespace {
    namespace: FString,
    key_count: i32,
    entry: Vec<Entry>,
}
struct Entry {
    key: FString,
    source_string_hash: i32,    // crc32
    localized_string: FString,
}

01 00 00 00
namespace_count = 0x1

FB FF FF FF 47 00 61 00 6D 00 65 00 00 00
FString
0xFFFFFFFB = -5 なので UTF-16-LE で5文字つまり10バイトで末尾に Null 付加されている。
47 00 61 00 6D 00 65 00 00 00
したがって
namespace = "Game"

A3 02 00 00
key_count = 0x2A3

0x2A3ぶん entry を読み込む
entry[0]
FB FF FF FF 4E 00 6F 00 6E 00 65 00 00 00
FString だから key = "None"

C5 0D 18 71
source_string_hash = 0x71180DC5

F0 FF FF FF 3D 00 3D 00 3D 00 3D 00 20 00 4D 00
45 00 4E 00 55 00 20 00 3D 00 3D 00 3D 00 3D 00
3D 00 00 00
FString だから localized_string = "==== MENU ====="

こんな感じで読み込めるから、これを元にエクスポート処理を実装すればよい。

インポートはオフセット値とか気にする必要はないので、上記の処理の反対を頭から繰り返すだけで可能