W3strings

The  extension is used to denote files that contain compressed localization data for The Witcher 3: Wild Hunt. Uncompressed, you can think of this data as being organized as a series of key-value pairs, with the key being a language-independent string ("master_volume") and the value being the localized version (english: "Master Volume"). In reality, they are organized somewhat differently[How?].

Mods can include  files in their folder structure that will add localization entries or modify existing ones. This is particularly useful if you want to add a menu for your mod, have some other display strings (such as for the combat log) that you want to be localized, or you want to change the existing text in the game, such as changing the name of an item.

w3strings encoder
A command-line tool by rmemr is [http://www.nexusmods.com/witcher3/mods/1055/? available here] that will encode (from a  file) and decode   files (to a   file).

Id Spaces
To minimize collisions, the tool splits the localization ids into bins, each denoted by an id space. This id space is an identifier for your localized mod, and rmemr suggests that you use the Nexus Mod ID for your mod as your id. This binning also restricts modders to a hefty 1000 localization entries for each mod. More information is available in his CDPR forum thread

Usage

 * Example Encode Usage:
 * DO NOT USE ID 9999 FOR YOUR MOD! IT IS RESERVED AS AN EXAMPLE ID.
 * DO NOT USE ID 9999 FOR YOUR MOD! IT IS RESERVED AS AN EXAMPLE ID.


 * Example Decode Usage:

Real-World Example
This is an example ripped from [http://www.nexusmods.com/witcher3/mods/1432/? Enhanced Targeting]. For more info on prefixes used for menus, have a look at the menus article.

locale.en.csv
2111432000|       |panel_Mods|Mods 2111432001|       |panel_et_name|Enhanced Targeting 2111432002|       |preset_Mods_et_name|Enhanced Targeting Defaults 2111432003|       |preset_value_et_default_kb|Default (KB & M) 2111432004|        |preset_value_et_default_controller|Default (Controller) 2111432005|       |option_et_enabled|Enabled 2111432006|       |option_et_camera_weight|Camera Direction Weight 2111432007|       |option_et_movement_weight|Movement Direction Weight 2111432008|       |option_et_facing_weight|Facing Direction Weight 2111432009|       |option_et_hysteresis|Hysteresis (Target Stickiness) 2111432010|       |option_et_in_frame_check|In-Frame Check 2111432011|       |option_et_cast_towards_camera|Cast Signs Towards Camera 2111432012|       |option_et_disable_camera_lock|Disable Camera Lock on Target Lock 2111432013|       |option_et_version|Version 2111432014|       |preset_et_name|Enhanced Targeting Defaults
 * meta[language=en]
 * id     |key(hex)|key(str)| text
 * comment lines use ; as first character
 * all comment lines (except the two line header) will be ignored
 * Enhanced Targeting's Nexus ID is 1432 so left is 211-1432-xxxx
 * Enhanced Targeting's Nexus ID is 1432 so left is 211-1432-xxxx

Batch Script For Encoding All Language Files
set my_id=9999 call w3strings.exe—encode raw_files\ar—id-space %my_id% call w3strings.exe—encode raw_files\br—id-space %my_id% call w3strings.exe—encode raw_files\cz—id-space %my_id% call w3strings.exe—encode raw_files\de—id-space %my_id% call w3strings.exe—encode raw_files\en—id-space %my_id% call w3strings.exe—encode raw_files\es—id-space %my_id% call w3strings.exe—encode raw_files\fr—id-space %my_id% call w3strings.exe—encode raw_files\hu—id-space %my_id% call w3strings.exe—encode raw_files\it—id-space %my_id% call w3strings.exe—encode raw_files\jp—id-space %my_id% call w3strings.exe—encode raw_files\kr—id-space %my_id% call w3strings.exe—encode raw_files\ru—id-space %my_id% call w3strings.exe—encode raw_files\zh—id-space %my_id% call w3strings.exe—encode raw_files\pl—id-space %my_id% pause This batch script will encode all raw files placed in encoder folder\raw_files. Note however that they are renamed so each file name contains only two letters identifying language, there is not even .csv format. (of course they are csv it's just not in the filename) This way all files are encoded to language_name.w3strings so you can just place them in your mod without renaming after encoding.

Just set id you're using in the strings in the first line.