You can also find this guide in the CYBERPUNK MODDING WIKI
Requirements
For this guide, you need to install the following requirements:
- Wolvenkit
- Any text editor (Visual Studio Code or Notepad++ are recommended)
- ArchiveXL
- RED4ext
- The mod you want to translate
There is no one way to do translations to existing Mods, but I am going to show two ways to do it in this guide:
- If the author provided a
.json.json
resource - Extracting the Localization File from a
.archive
mod
For the purposes of this guide, I will use my mod as example. The file names and file structure used aren't mandatory, but as general rule avoid using symbols in your file/folder names besides
-
and _
. Useful Tips for this guide
- Creating your Wolvenkit project
Open Wolvenkit and click on Create a new project:

Give your project an appropriate name, related to the content you are translating. The name of your project will be the name of the .archive file (can be edited later).

- Internal naming convention for supported languages
Internally, supported languages are stored into folders with acronyms related to each supported language. It should like this:

Each acronym corresponds to the following languages:
ar-ar: Arabic (العربية)
cz-cz: Czech (čeština)
de-de: German (Deutsch)
en-us: English (English)
es-es: Spanish (Español)
es-mx: Latin American Spanish (Español latinoamericano)
fr-fr: French (Français)
hu-hu: Hungarian (Magyar)
it-it: Italian (Italiano)
jp-jp: Japanese (日本語)
kr-kr: Korean (한국어)
pl-pl: Polish (Polski)
pt-br: Brazilian Portuguese (Português do Brasil)
ru-ru: Russian (Русский)
th-th: Thai (ไทย)
tr-tr: Turkish (Türkçe)
ua-ua: Ukrainian (Українська)
zh-cn: Simplified Chinese (简体中文)
zh-tw: Traditional Chinese (繁體中文)
This list will be helpful later to setup the ArchiveXL files to properly add your translation (don't worry, is properly explained too).
Code nomenclature for text formatting
Cyberpunk uses some kind of XML + json text formatting. The following are just a few of the most commonly used codes for text formatting:
\n
This is used for line breaks. You can't use Enter to do line breaks, or your whole text won't be recognized. You can use several \n for bigger line breaks if you need it. This rule is the same for .json.json files and .json files (don't worry, both file extensions are explained later).
<Rich color="TooltipText.cyberwareDescriptionHighlightColor" style="Semi-Bold">YOUR WORD</>
This is used to mark in Orange some words, as it can be seen on the following example:

It's important that you respect the format of the text of the Mod that you are translating, so as not to deviate from the author's original intention of emphasis.
__
Starting the Translation
- If the author provided a .json.json resource
Install all the previously mentioned requirements and download the .json.json file from the mod page. Create a Wolvenkit project.
Step One: Importing .json.json to your project
Open the project, hover over raw folder in Project Explorer and click on the yellow icon to open the raw folder on Windows Explorer:

On Windows Explorer, move the already downloaded .json.json file over raw and make some folder to hold it. For this example I'll call that folder localization and inside this folder, I'm going to create another folder related to the language I want to use.
For this example, I'll make two folders: es-es and es-mx, because they are fairly similar and also my main language and then I'll copy and paste the same .json.json in both folders. This is how it'll look inside Wolvenkit:

Import the .json.json file to your project
Do a Right Click on the .json.json file and select Convert from JSON:

Do the same for all files you need to import. After importing, Project Explorer should look like this:

Step Two: Translating the mod
You can choose two ways of translating that .json.json file:
1) Translating the .json.json file on a text editor before importing
You can do this when the .json.json file is already decompiled (this is why it has two .json extensions, because it was exported from a Wolvenkit compiled .json). It should look like this:

This method is a little harder to read and prone to errors, but some people may find it comfortable. You need to import the .json.json file AFTER doing the translation on this case, that way you'll be importing your already translated file.
2) Translating the .json file in Wolvenkit after importing
A file with .json extension (only one extension) is already compiled and not able to be opened on a text editor, but it can be opened in Wolvenkit. This method is somewhat easier to read because the XML text formatting won't be decompiled, allowing for better readability.
Let's see how a .json file looks inside Wolvenkit:

Each numbered entry is one specific LocKey (Localization Key) and they can hold item names, item descriptions, ability descriptions and anything that can be read on items.
Inside each entry, you'll find the following parameters:
- femaleVariant: This is the default field for any text, for some reason. You can write here names, descriptions, etc.
- maleVariant: Used for some specific cases if a gender based variant exist (clothing, for example).
- primaryKey: This is how the entry is called inside the game. Uses numbers. Is recommended to keep on 0 to avoid unintended collisions with in-game texts or other mods.
- secondaryKey: This is also how an entry can be named internally and is recommended to use this field instead primaryKey, because it can hold characters and some symbols. Try to use descriptive names related to your mod and where are you going to use the entry inside your mod.
This is how a single entry will look inside Wolvenkit:

Always try to use descriptive secondaryKey names to avoid PEBCAK errors
Please, keep in mind that you can't use Enter to do line breaks or your text will break. Use \n instead.
This is how a heavy text entry looks like:

Yeah...
All that text is one single big line. Always keep in mind this.
Step Three: Final touches and Packing your Translation mod
After doing the translation with either method, you need to create an ArchiveXL file to merge your .json files with the rest of the game translations. This process is really quick and easy, thanks to psiberx tools.
1) Generate a new ArchiveXL file
Click on New File in Wolvenkit:

Select ArchiveXL and then ArchiveXL file. Change the generated name to the same as your mod (not mandatory, just to have both files together after installation), but preserve the extensions .archive.xl. Following this example, the resulting name will be RaitoLabs-ES.archive.xl. Click on Create.

2) Fill your ArchiveXL file
After clicking Create, your file should open automatically in your main text editor (in my case, VSCode).
The following code structure should be used to fill your ArchiveXL file:
localization:
extend: THE_ARCHIVEXL_MOD_YOU_WANT_TO_TRANSLATE
onscreens:
Language_Acronym: File_Path_To_Your_JSON
- localization tells the system that you are adding text.
- extend needs to be pointing to the .archive.xl file of the mod you want to translate. ArchiveXL will take the contents and automatically merge them seamlessly, this way you don't have to overwrite any file from the mod you are translating, providing flexibility and maximum compatibility.
- onscreens tells the system the type of text you are adding.
- Language_Acronym is related to how supported languages are called internally. I've provided a list earlier with all the supported languages. On this example, will be es-es and es-mx.
- File_Path_To_Your_JSON, as the name implies, should be the file path to your translated .json file. The easiest way to not make a mistake is using Wolvenkit to get that file path:
Do a Right Click on your .json file and select Copy relative path to game file. Then paste the contents in your ArchiveXL file.

This is how the code should look on this example:
localization:
extend: RaitoLabs.archive.xl
onscreens:
es-es: localization\es-es\RaitoLoc.json
es-mx: localization\es-mx\RaitoLoc.json
Is important that you keep the indentation as shown in the code examples. It's also extremely important that you use backslash (\) instead regular slash (/) for the file path if you do it manually.
Packing your mod
Wolvenkit will pack your mod with a one click press. You can also install your files for yourself to test them and see if your changes are properly working.
Click on Pack mod to create a ready to upload zip file and Install mod to install it in your game files.

And, finally, your translation file is ready to be tested or distributed. This is how the files should look once installed:

Using a similar mod name to the one you are translating will keep them near and look nice.
Your packed file will have the proper file path ready to be extracted directly on the main game folder (and also compatible with Mod Managers). This packed file will be located in your Project main folder:

It's over... Or isn't?
______________________________
- Extracting the Localization File from a .archive mod
Install all the previously mentioned requirements and download the mod you want to translate (if you haven't already). Create a Wolvenkit project.
Open your project, once loaded open the Assets Browser. Once open, click on Mod Browser:

When you click on Mod Browser, your system may get frozen for a few seconds, depending on how many .archive mods you have in your system. Once loaded, look up for the mod you want to translate:

Open the internal folders until you find the Localization File you want to extract:

Once found, do a Right Click and select Add selected items to project:

As the name implies, you now have the .json Localization file in your project:

To avoid conflicts with the Mod you are translating, let's change the file path to a new one.
Hover over archive folder and click on the yellow icon to open it on Windows Explorer:

Inside Windows Explorer, create some new folder. For this example, I'm going to make one called localization, and inside that folder I'll create two folders called es-es and es-mx, to follow the internal naming convention for supported languages.
Once the folders are created, on Windows Explorer, I'll copy and paste the .json file into the es-es and es-mx folder. This is how it'll look on Wolvenkit once it's done:

Now you can remove the original extracted folders and extracted .json file to avoid the conflicts with the Mod you are translating. Hover over base (on this example), and click on the red icon with the trashcan to Delete this file/folder:

After deleting the folders, this is how your project will look, ready to be translated:

You can read the "Translating the .json file in Wolvenkit after importing" part of the tutorial to get more insights on translating a .json file on Wolvenkit.
After finishing your translation, you are ready to do the mandatory final steps to pack it or/and install it in your system. Read "Final touches and Packing your Translation mod" part of the tutorial to see how to do it. Be sure to include the ArchiveXL file or your translation won't work.
I hope that this guide was helpful. Good luck in your text translations!
Soon I'll include the steps on how to upload it correctly to Nexus, so the Mod you are translating gets a beautiful flag and your mod automatically listed under the Translation segment.
11 comments
Also, I've got another of my mods to also overwrite cooked_archive, and they don't seem to merge -- one always takes priority. Is there a fix for this?
thanks for your article, it's helpful for me.
if without this , I never try to translate CP2077 mod.
Thanks to you!!