While you're here, please consider supporting GamingOnLinux on:
Reward Tiers:
Patreon. Plain Donations:
PayPal.
This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!
You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
Reward Tiers:
This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!
You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
Login / Register
- Linaro reveal they're collaborating with Valve for the Steam Frame
- Steam Frame and Steam Machine will be another good boost for Flatpaks and desktop Linux overall too
- Canonical call for testing their Steam gaming Snap for Arm Linux
- Valve update the Steam Workshop to allow mods to support multiple game versions
- SteamOS 3.7.20 adds the ntsync driver to help improve some game performance
- > See more over 30 days here
- Game recommendation?
- JSVRamirez - Weekend Players' Club 2026-01-09
- Minoscereb - Will you buy the new Steam Frame?
- Arehandoro - Welcome back to the GamingOnLinux Forum
- Liam Dawe - Does anyone game and capture card on linux mint?
- LoudTechie - See more posts
How to setup OpenMW for modern Morrowind on Linux / SteamOS and Steam Deck
How to install Hollow Knight: Silksong mods on Linux, SteamOS and Steam Deck
I discovered that the steam game [ENSLAVED](https://store.steampowered.com/app/245280/ENSLAVED_Odyssey_to_the_West_Premium_Edition/) is actually [b]DRMFREE[/b!!! I am able to load and play it from one of my Lutris prefixes (the EA APP prefix), but the game only load in English and I want to play it in Spanish.
If I run it via Steam, is works in Spanish... SO, I am missing something here..
It doesn't work.
Then follow this steps with your game running with spanish and then compare the both files you got. If the game language is set by an environment variable, you should be able to see it.
Anyway, I just tested this procedure with one of my games and I couldn't find any env variable that sets the name. So, reading a little bit on the Steam docs I can see that Steam api has an [specific function](https://partner.steamgames.com/doc/api/ISteamApps#GetCurrentGameLanguage) that selects the game language. If every Steam game works this way, then your best chance to setup the correct game name will be by using [goldberg emulator](https://github.com/su6ur6an/goldberg_emulator) and [setup language.txt](https://github.com/su6ur6an/goldberg_emulator/blob/master/Readme_release.txt) with the correct output.
BTW, the latest binary release of goldberg emulator it's quite old, you may have to compile the emulator for you distro.
Last edited by x_wing on 8 Jun 2022 at 11:02 pm UTC
Edit;
Ups!
SHELL=/bin/bashSESSION_MANAGER=local/Benitez-PC:@/tmp/.ICE-unix/2034,unix/Benitez-PC:/tmp/.ICE-unix/2034QT_ACCESSIBILITY=1XDG_CONFIG_DIRS=/etc/xdg/xdg-cinnamon:/etc/xdgXDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1GNOME_DESKTOP_SESSION_ID=this-is-deprecatedGTK_IM_MODULE=ibusGTK2_MODULES=overlay-scrollbarLANGUAGE=es_AR:esQT4_IM_MODULE=ibusMANDATORY_PATH=/usr/share/gconf/cinnamon.mandatory.pathSSH_AUTH_SOCK=/run/user/1001/keyring/ssh__GL_SHADER_DISK_CACHE_PATH=/mnt/epic-games-store/Enslaved/Binaries/Win32XMODIFIERS=@im=ibusDESKTOP_SESSION=cinnamonSSH_AGENT_PID=2149WINE_MONO_CACHE_DIR=/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/monoGST_PLUGIN_SYSTEM_PATH_1_0=/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/lib64/gstreamer-1.0/:/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/lib/gstreamer-1.0/GTK_MODULES=gail:atk-bridgeXDG_SEAT=seat0PWD=/mnt/epic-games-store/Enslaved/Binaries/Win32XDG_SESSION_DESKTOP=cinnamonLOGNAME=carlosXDG_SESSION_TYPE=x11DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1GPG_AGENT_INFO=/run/user/1001/gnupg/S.gpg-agent:0:1WINEESYNC=1XAUTHORITY=/home/carlos/.XauthorityXDG_GREETER_DATA_DIR=/var/lib/lightdm-data/carlosLUTRIS_GAME_UUID=fdcd8cec-d19c-4245-bce2-317aa68c704fGDM_LANG=es_ARWINEARCH=win64HOME=/home/carlosLANG=es_ES.utf-8WINEPREFIX=/mnt/InstalledGames/Lutris/ea-desktopXDG_CURRENT_DESKTOP=X-CinnamonDXVK_LOG_LEVEL=noneXDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0DXVK_ENABLE_NVAPI=1CLUTTER_IM_MODULE=ibusWINEDLLOVERRIDES=d3d10core,d3d11,d3d12,d3d9,d3dcompiler_33,d3dcompiler_34,d3dcompiler_35,d3dcompiler_36,d3dcompiler_37,d3dcompiler_38,d3dcompiler_39,d3dcompiler_40,d3dcompiler_41,d3dcompiler_42,d3dcompiler_43,d3dcompiler_46,d3dcompiler_47,d3dx10,d3dx10_33,d3dx10_34,d3dx10_35,d3dx10_36,d3dx10_37,d3dx10_38,d3dx10_39,d3dx10_40,d3dx10_41,d3dx10_42,d3dx10_43,d3dx11_42,d3dx11_43,d3dx9_24,d3dx9_25,d3dx9_26,d3dx9_27,d3dx9_28,d3dx9_29,d3dx9_30,d3dx9_31,d3dx9_32,d3dx9_33,d3dx9_34,d3dx9_35,d3dx9_36,d3dx9_37,d3dx9_38,d3dx9_39,d3dx9_40,d3dx9_41,d3dx9_42,d3dx9_43,dxgi,nvapi,nvapi64,nvml=n;winemenubuilder=XDG_SESSION_CLASS=user__GL_SHADER_DISK_CACHE=1GTK_OVERLAY_SCROLLING=0DEFAULTS_PATH=/usr/share/gconf/cinnamon.default.pathPROTON_EAC_RUNTIME=/home/carlos/.local/share/lutris/runtime/eac_runtimeUSER=carlosWINE_LARGE_ADDRESS_AWARE=1game_name=EnslavedDISPLAY=:0SHLVL=0WINE_GECKO_CACHE_DIR=/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/geckoQT_IM_MODULE=ibusXDG_VTNR=7XDG_SESSION_ID=c3WINEDEBUG=-allLD_LIBRARY_PATH=/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/lib:/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/lib64:/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu:/lib/x86_64-linux-gnu:/lib/i386-linux-gnu:/usr/lib:/lib:/usr/lib/i386-linux-gnu/sse2:/usr/lib/i386-linux-gnu/i686/sse2:/usr/lib/x86_64-linux-gnu/libfakeroot:/lib64:/home/carlos/.local/share/lutris/runtime/Ubuntu-18.04-i686:/home/carlos/.local/share/lutris/runtime/steam/i386/lib/i386-linux-gnu:/home/carlos/.local/share/lutris/runtime/steam/i386/lib:/home/carlos/.local/share/lutris/runtime/steam/i386/usr/lib/i386-linux-gnu:/home/carlos/.local/share/lutris/runtime/steam/i386/usr/lib:/home/carlos/.local/share/lutris/runtime/Ubuntu-18.04-x86_64:/home/carlos/.local/share/lutris/runtime/steam/amd64/lib/x86_64-linux-gnu:/home/carlos/.local/share/lutris/runtime/steam/amd64/lib:/home/carlos/.local/share/lutris/runtime/steam/amd64/usr/lib/x86_64-linux-gnu:/home/carlos/.local/share/lutris/runtime/steam/amd64/usr/libXDG_RUNTIME_DIR=/run/user/1001VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.jsonXDG_DATA_DIRS=/usr/share/gnome:/usr/share/cinnamon:/home/carlos/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/sharePATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/carlos/.local/binGDMSESSION=cinnamonDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/busWINE=/home/carlos/.local/share/lutris/runners/wine/lutris-6.4-x86_64/bin/wineGIO_LAUNCHED_DESKTOP_FILE_PID=6752GIO_LAUNCHED_DESKTOP_FILE=/home/carlos/Escritorio/net.lutris.Lutris.desktopWINEFSYNC=0DXVK_NVAPIHACK=0WINE_FULLSCREEN_FSR=1PROTON_BATTLEYE_RUNTIME=/home/carlos/.local/share/lutris/runtime/battleye_runtimeLD_PRELOAD=/usr/$LIB/libgamemodeauto.so.0WINELOADERNOEXEC=1
Last edited by Comandante Ñoñardo on 9 Jun 2022 at 6:20 pm UTC
So, during this weekend I was able to validate you assumption: the language selection is definitely tied to the steam api dll. This means that using goldberg emulator should do the trick... but it doesn't on linux as it makes the game crash for some reason (there is some weird debugging function call that I'm not sure why is there).
I then decided to check a little bit the game files structure and found some config files with language selection (and even with the language menu selection) but I couldn't figure out how make this work (the Steam exe is probably tied to the Steam api). Which forced me to start playing around with the files that looked like the language and, fortunately, that gave the expected results, which allowed me to create this shitty script:
#!/bin/sh
USAGE="Usage: ./EnslavedLangSw.sh [LANGUAGE|--restore]\nLANGUAGE options:\n DEU\n ESN\n ITA\n FRA\n\n --restore Restores language backups (i.e. rollbacks to english)"
if [ $# -lt 1 ]
then
echo "Invalid arguments!"
echo $USAGE
return 1;
fi
LANGUAGES="DEU ESN ITA FRA"
VALID_LANG=0
BASE_PATH="."
DIR_CHECK="$BASE_PATH/Binaries/Win32/Enslaved.exe"
COOKED_DIR="$BASE_PATH/MonkeyGame/CookedPC/Maps"
LOCALIZATION_DIR="$BASE_PATH/Engine/Localization"
MONKEY_LOC_DIR="$BASE_PATH/MonkeyGame/Localization"
MONKEY_COOK_DIR="$BASE_PATH/MonkeyGame/CookedPC/Packages/Audio"
MONKEY_MAPS_DIR="$BASE_PATH/MonkeyGame/CookedPC/Maps"
MOVIE_LOADING="$BASE_PATH/MonkeyGame/Movies/loading%-%.bik"
MOVIE_DLC1_TXT="$BASE_PATH/MonkeyGame/Movies/DLC1_loadingTruffles%-%.txt"
MOVIE_DLC1_BIK="$BASE_PATH/MonkeyGame/Movies/DLC1_loadingTruffles%-%.bik"
MOVIE_SAVEDATA="$BASE_PATH/MonkeyGame/Movies/Savedata%-%.bik"
RestoreBackup()
{
if [ ! -d "$LOCALIZATION_DIR/../BKP" ]
then
echo "Can't find backup. Did you ever run this script?"
exit 1
fi
rm -rf $LOCALIZATION_DIR/INT
mv -f $LOCALIZATION_DIR/../BKP $LOCALIZATION_DIR/INT
rm -rf $MONKEY_LOC_DIR/INT
mv -f $MONKEY_LOC_DIR/../BKP $MONKEY_LOC_DIR/INT
rm -rf $MONKEY_COOK_DIR/INT
mv -f $MONKEY_COOK_DIR/../../../BKP_COOK $MONKEY_COOK_DIR/INT
for file in $(find $MONKEY_MAPS_DIR | grep "bkp$")
do
TARGET=$(echo $file | sed "s/\(.\)\.bkp/\1/")
mv $file $TARGET
done
LOADING_TARGET=$(echo $MOVIE_LOADING | sed "s/%-%//")
mv $LOADING_TARGET.bkp $LOADING_TARGET
DLC1_TXT_TARGET=$(echo $MOVIE_DLC1_TXT | sed "s/%-%//")
mv $DLC1_TXT_TARGET.bkp $DLC1_TXT_TARGET
DLC1_BIK_TARGET=$(echo $MOVIE_DLC1_BIK | sed "s/%-%//")
mv $DLC1_BIK_TARGET.bkp $DLC1_BIK_TARGET
SAVEDATA_TARGET=$(echo $MOVIE_SAVEDATA | sed "s/%-%//")
mv $SAVEDATA_TARGET.bkp $SAVEDATA_TARGET
}
if [ ! -f $DIR_CHECK ]
then
echo "Invalid directory. You must run this script in the installation directory of Enslaved."
exit 1
fi
if [ $1 = "--restore" ]
then
RestoreBackup
exit 0
fi
for LNG in $LANGUAGES
do
VALID_LANG=$([ $LNG = $1 -o $VALID_LANG -eq 1 ] && echo 1 || echo 0)
done
if [ $VALID_LANG -eq 0 ]
then
echo "Language not supported. This script only supports: $LANGUAGES"
exit 1
fi
echo "Translating...\n"
echo "Moving Engine Localization Dir..."
mv $LOCALIZATION_DIR/INT $LOCALIZATION_DIR/../BKP
cp -r $LOCALIZATION_DIR/$1 $LOCALIZATION_DIR/INT
for file in $(ls $LOCALIZATION_DIR/INT)
do
TARGET=$(echo $file | sed "s/\(.*\)\.$1/\1\.int/i")
mv $LOCALIZATION_DIR/INT/$file $LOCALIZATION_DIR/INT/$TARGET
done
echo "Moving Monkey Localization Dir..."
mv $MONKEY_LOC_DIR/INT $MONKEY_LOC_DIR/../BKP
cp -r $MONKEY_LOC_DIR/$1 $MONKEY_LOC_DIR/INT
for file in $(ls $MONKEY_LOC_DIR/INT)
do
TARGET=$(echo $file | sed "s/\(.*\)\.$1/\1\.int/i")
mv $MONKEY_LOC_DIR/INT/$file $MONKEY_LOC_DIR/INT/$TARGET
done
echo "Moving Monkey Cooked Audio..."
mv $MONKEY_COOK_DIR/INT $MONKEY_COOK_DIR/../../../BKP_COOK
cp -r $MONKEY_COOK_DIR/$1 $MONKEY_COOK_DIR/INT
for file in $(ls $MONKEY_COOK_DIR/INT)
do
TARGET=$(echo $file | sed "s/\(.*\)_$1.upk/\1.upk/")
mv $MONKEY_COOK_DIR/INT/$file $MONKEY_COOK_DIR/INT/$TARGET
done
echo "Moving Monkey Maps..."
for file in $(find $MONKEY_MAPS_DIR | grep "$1.upk$")
do
TARGET=$(echo $file | sed "s/\(.\)$1.upk/\1INT.upk/")
mv $TARGET $TARGET.bkp
cp $file $TARGET
done
LOADING_TARGET=$(echo $MOVIE_LOADING | sed "s/%-%//")
LOADING_SOURCE=$(echo $MOVIE_LOADING | sed "s/%-%/_$1/")
mv $LOADING_TARGET $LOADING_TARGET.bkp
cp $LOADING_SOURCE $LOADING_TARGET
DLC1_TXT_TARGET=$(echo $MOVIE_DLC1_TXT | sed "s/%-%//")
DLC1_TXT_SOURCE=$(echo $MOVIE_DLC1_TXT | sed "s/%-%/_$1/")
mv $DLC1_TXT_TARGET $DLC1_TXT_TARGET.bkp
cp $DLC1_TXT_SOURCE $DLC1_TXT_TARGET
DLC1_BIK_TARGET=$(echo $MOVIE_DLC1_BIK | sed "s/%-%//")
DLC1_BIK_SOURCE=$(echo $MOVIE_DLC1_BIK | sed "s/%-%/_$1/")
mv $DLC1_BIK_TARGET $DLC1_BIK_TARGET.bkp
cp $DLC1_BIK_SOURCE $DLC1_BIK_TARGET
SAVEDATA_TARGET=$(echo $MOVIE_SAVEDATA | sed "s/%-%//")
SAVEDATA_SOURCE=$(echo $MOVIE_SAVEDATA | sed "s/%-%/_$1/")
mv $SAVEDATA_TARGET $SAVEDATA_TARGET.bkp
cp $SAVEDATA_SOURCE $SAVEDATA_TARGET
exit 0
In order to use it:
Note 1: The script can switch to the other fully supported languages (i.e. DEU, ITA & FRA)
Note 2: By only modifying the localization directory (see $LOCALIZATION_DIR) you can keep English voices with your local preferred language as subtitles (you must enable subtitles in the game menu)
Note 3: Once you run the script to switch language, you can rollback the changes by running ./EnslavedLangSw.sh --restore
Note 4: If you switch languages twice without restoring to English between switches, restore will no work anymore
Last edited by x_wing on 22 Jun 2022 at 2:16 pm UTC
With your script, the game is perfectly playable in my language.
Note that some cinematics still have English audio, because they are .bik files with several audio streams inside that must be re-encoded and is outside the range of any script (I guess I can edit the files and play with the audio streams)...
Anyway! Your fix make the game playable DRMFREE in my language (until the publisher decide to release it on GOG in, I don't know, 30 years)