You can also find this guide in the CYBERPUNK MODDING WIKI

Requirements

For this guide, you need to install the following requirements:



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:

DON'T CHANGE THE INDENTATION OR THE FILE WILL BE BROKEN.

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:

Don't worry, onscreens.json in the base game files is way more bigger than this

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.

Article information

Added on

Edited on

Written by

vanaukas

11 comments

  1. xoshnaw
    xoshnaw
    • member
    • 65 kudos
    how to only extract female variant strings then translate then import back?
    1. vanaukas
      vanaukas
      • premium
      • 127 kudos
      I have no idea, all I know is this method I'm sharing
  2. PROSTO1010
    PROSTO1010
    • member
    • 0 kudos
    I have a question. How exactly should I translate the mod in a text editor (I use the 1 method from step 2). Should I just find the lines "femaleVariant" containing any description of the cyberware and translate it? It's just that in addition to the descriptions, there are other lines of code that I don't understand what to do with. What shoud i do?
    1. vanaukas
      vanaukas
      • premium
      • 127 kudos
      YEah just change the stuff on female variant. I recommend using wolvenkit regardless, as you need to input some symbols in unicode when you do just text, wonvenkit won't have that limitation
  3. vanaukas
    vanaukas
    • premium
    • 127 kudos
    If you have questions, please let me know!
    1. kikosawa
      kikosawa
      • member
      • 1 kudos
      I have a question. How does one create new LocKeys? I've been trying to make a second version of a phone message from an NPC that is dependant on an existing game fact. I modified the cooked_journal.journal to give this NPC an additional message to send, but nothing shows up in the game if I put my custom LocKey into it. When I input an existing localization string, everything works, but with the custom one -- nothing. I've made this LocKey my birthday number (8 digits) and typed it into a my json. WolvenKit also doesn't recognize this LocKey as valid. How to you get around this?
    2. vanaukas
      vanaukas
      • premium
      • 127 kudos
      Maybe is not wise to use numbers at all for LocKeys. Also, I think you should go to the discord server, because I don't know if there is any difference on how LocKeys are structured for journal stuff.
    3. kikosawa
      kikosawa
      • member
      • 1 kudos
      I can't seem to enter Discord... I got my mod "working" by abandoning LocKeys altogether and just putting the text into the cooked_journal as is. Where can I find help? I don't know what to do to fix this :(

      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?
    4. vanaukas
      vanaukas
      • premium
      • 127 kudos
      You cna find help on discord cyberpunk modding server  Get your discord working and you'll find all your answers in there.
    5. kikosawa
      kikosawa
      • member
      • 1 kudos
      Thanks!
  4. hsun770916
    hsun770916
    • member
    • 3 kudos
    Hi, vanaukas,
    thanks for your article, it's helpful for me.
    if without this , I never try to translate CP2077 mod.
    Thanks to you!!