Cyberpunk 2077

File information

Last updated

Original upload

Created by

Alsh

Uploaded by

alsh0083

Virus scan

Safe to use

About this mod

This is a mod that takes all the localization text for the game in every language other than English and appends English to it. The end result is you can get dual language subtitles and also dual language in the game interface itself, to include the interactable computers in the game, scanning, in game phone, codex, character screens, etc.

Requirements
Permissions and credits
Changelogs
Cyberpunk Dual Language Subtitles Mod (English Appended)

I am a hobbyist linguist and I study Korean quite a bit. When Phantom Liberty came out I got absorbed into Cyberpunk again and kept thinking how I wish the game had dual subtitles sort of like Language Reactor. So I messed around a bit and made this.

How to install and use? Well like any other mod drop it in the mods folder in the game mod directory and enable mods. From there just do 2 things in the game settings itself (Note: someone also said it works if its placed in archive/pc/mod folder, so does not seem to need redmod to work)

Set language subtitle settings to any language other than English, all languages other than English will have English appended to them. 

If you also want the game interfaces (computers, eye scans, telephone, names of object, menus, etc) to have the same setup you need to also change the interface language to any language other than English and that will load up the interface localization.

Note: Both these settings need to be done in the main menu and not after a save is loaded or the options will not show up.

Happy studying!

Note: UnforgivenWar commented on this mod and told me about this Pause mod which plays really well with this mod. You can bind a key using CyberEngineTweaks and the Pause mod to freeze time at any moment which will give you time to read longer dialogues if you need to without being time limited.

Details/lessons learned for anyone who is curious:


Ok so I have never modded Cyberpunk before and this is sort of a niche mod but it’s one that I REALLY wanted… So I played around with the modding tools and sort of figured it out. I was lazy and used ChatGPT to write the scripts with the heavy lifting by figuring out what worked or not given how the game processes this stuff.

So the way this mod works is it appends English to other language subtitles/interface localization information in the game so you can see both.

The good? Well if you are studying another language and want this capability it at least gets you there with a few little glitches here and there.

The bad? There are thousands of json files that have to be modified and within those thousands of files there are thousands and thousands of lines of text. So there is no way to manually do this in a short time, it has to be scripted. That said, the method I used to append the text mostly works without issue but there are a few minor problems here and there. 

The main caveat is some boxes are simply not designed to hold that much text and some text cut off issues occur. As someone studying another language I can completely look past it to get me the functionality I care about in most instances which is simply having both languages displayed at the same time. One example of this is the hold V menu for selecting vehicles, the text is bunched up but you can still just reference the photo to select the vehicle. Update: I've done some tweaking and addressed this some, I will continue where I can to correct issues like these.

I have limited testing with this so far as it took me a bit to figure it out and make it, from here if I continue to figure out anything to polish things up some more I will. I know English and Korean so I did most of my testing that way. It’s difficult for me to verify other languages beyond just giving them a glance and knowing it visually looks like it's ok.


How I did it:


Tools Used: WolvenKit, PowerShell, and ChatGPT

If anyone gets curious on how to do this on their own, maybe because they want a different combination of languages besides language + english it works in the following manner. You will need some level of scripting knowledge (or in my case enough to prompt ChatGPT properly) and comfortability with the game modding tools.

The game archive structures have base and ep1, base being the base game and ep1 being the Phantom Liberty expansion. Within those are localization folders and within those folders are language directories. If you go into the language directories there can possibly be many subfolders depending on if you have the audio installed but the only ones that matter for this are “onscreens” and “subtitles.”

If those folders are extracted (I used WolvenKit) you will have a lot of .json files in the C2RW format that then need to be converted (also via WolvenKit) into actual json that can be processed.

Onscreens JSON Example: This contains two large files that hold all of the interface related localization, an example snippet:

{
              "$type": "localizationPersistenceOnScreenEntry",
              "femaleVariant": "렐릭 소프트웨어 업그레이드 완료",
              "maleVariant": "",
              "primaryKey": "78477",
              "secondaryKey": "Story-ep1-quest-main_quests-q301-scenes-q301_03_crash-_localizedMessage"
            },

Subtitles JSON Example: This contains a bunch of subdirectories and smaller files and is pretty much exactly what it sounds like, the subtitles that actually display in the game during conversations, etc. Here is an example snippet:

{
              "$type": "localizationPersistenceSubtitleEntry",
              "femaleVariant": "아직도 떠나고 싶어?",
              "maleVariant": "",
              "stringId": "1764916827582873600"
            },


Now you may have noticed the femaleVarient and maleVariant properties but the male is blank. This is because in any instance where there is only 1 option the femaleVariant is the default one that is filled in. This ended up causing some trickery when appending English because some languages (Japanese for example) have A LOT of minor variance between femaleVarient and maleVariant while in English there may be none at all. So I had to add some extra logic to append the femaleVariant English to the maleVariant in the event the English maleVarient was blank. I also added “\n” in between the two languages as this will produce a newline and in most instances a cleaner result (in my opinion).

However, one weird thing I found was that character names in a lot of the subtitle displays would end up not honoring the \n for newline and have some sort of weird character or \n depending on the language. The only properties I can use to compare to the English file are the primarykey or secondaryKey on the ‘onscreens’ files so I took a stab at using both ‘characters’ and ‘displayName’ as a pattern to ID and remove the newline from those names and it looks like it worked fine on my short testing. 

I have been working as I identify these instances to clean them up but it can be tricky as they may not always have a good secondaryKey property to match off of so it has required some creative workarounds.

Lastly, because I decided to go past my original scope. I significantly ballooned the amount of work I needed to do. I first made Korean and English only, because that's all I needed… and I was going to upload just that… Until I was overwhelmed with guilt imagining someone who may be studying another language wishing they also had this. So 4 days later here we are.

For the base game I had to process 57,855 files and for the expansion another 13,623 to cover all non-english language + english combinations. I ended up doing a lot of work to get parallelization going to at least process multiple language directories at once but even with it all being scripted in Powershell I still drove up my CPU and memory usage a decent bit due to the load taken to comb through everything. Sticking with my original plan of just Korean would have been a lot better for me as it would have been 1 day and just back to the game!

Final Thoughts:
Sorry for writing so much but if you read this far thanks for your interest! I wanted to outline the process as much as I could for others to reference. There are limits to what I'm willing to do for something like this (a mod in my free time mostly intended for personal use). I’m sure there are other language combinations besides English some people will want but I can’t possibly predict all of those, and since English tends to be one of the most common languages many people study as a second language it made the most sense to me as a native English speaker to target that.

There’s also not really a mechanism for me to inject different combinations without creating a separate mod due to this method literally being attaching English text to the other language localizations in the game files. A new mod project and such would have to be made to make a different combination.

The person who did the Witcher 3 method wrote a python script to allow for input on what two languages and the script would call some external tools to do the combination and have it ready to go. Not sure if that's possible easily with Cyberpunk due to the modding method being so different. Maybe with WolvenKit CLI something could be done but it would take a decent bit of work to accomplish.

Anyways hope for those who want this functionality that this mod is useful to them. Thanks -Alan