Every article tag can be clicked to get a list of all articles in that category. Every article tag also has an RSS feed! You can customize an RSS feed too!
How to force game language on Lutris??
Page: 1/2»
  Go to:
Some games don't have an option for to set the language manually; they use some system data...

I discovered that the steam game ENSLAVED 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..
This topic has an answer marked - jump to answer.
Ehvis Jun 6, 2022
Use the system options to set the environment variable LANG to something appropriate for what you want and see if that works.
Quoting: EhvisUse the system options to set the environment variable LANG to something appropriate for what you want and see if that works.

Like this?


It doesn't work.
Ehvis Jun 8, 2022
Replace LC_ALL with LANG.
still no luck.
x_wing Jun 8, 2022
I know this will sound a little bit hacky but: If the language is set by an environment variable we can check that by the program environment. So, run the game, search the PID and cat /proc/${PID}/environ.
How to do that, exactly? step by step, please
x_wing Jun 8, 2022
Quoting: Comandante ÑoñardoHow to do that, exactly? step by step, please

  • Search for your game bin name (browse local files from Steam)

  • Start your game with any language different to spanish

  • Minimimize and open a terminal

  • run: ps -A | grep YOUR_GAME_BIN_NAME

  • Copy the number you see in the first column

  • run: cat /proc/${NUMBER}/environ

  • Copy that output to a file



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 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 and setup language.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 June 2022 at 11:02 pm UTC
Order "Run" not found.

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 June 2022 at 6:20 pm UTC
Comandante Ñoñardo Jun 20, 2022
I tried this game on a Windows 10 PC (copy and pasting the Enslaved folder and running enslaved.exe) and the problem persist, so the game in not 100% DRMFREE, because it seems the language is tied to the steam client.
x_wing Jun 22, 2022
Quoting: Comandante ÑoñardoI tried this game on a Windows 10 PC (copy and pasting the Enslaved folder and running enslaved.exe) and the problem persist, so the game in not 100% DRMFREE, because it seems the language is tied to the steam client.

I finally end up buying this game for the sake of trying to figure out what is going on with the install.

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:
  • Open the installation directory of Enslaved in a terminal

  • Run the script as: ./EnslavedLangSw.sh ESN

  • Run the game and enjoy the full spanish experience



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 June 2022 at 2:16 pm UTC
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!
Login / Register


Or login with...
Sign in with Steam Sign in with Google
Social logins require cookies to stay logged in.