From 62c3497b27c1b53cac8f2fb9f22d30de616b5904 Mon Sep 17 00:00:00 2001 From: Htylol Date: Tue, 17 Sep 2024 07:56:30 +0500 Subject: [PATCH] Added associative massive translite --- data_from_portwine/locales/PortProton.pot | 58 +- .../locales/es/LC_MESSAGES/PortProton.mo | Bin 68148 -> 0 bytes .../locales/es/LC_MESSAGES/PortProton.po | 64 +- .../locales/ru/LC_MESSAGES/PortProton.mo | Bin 93741 -> 0 bytes .../locales/ru/LC_MESSAGES/PortProton.po | 94 +- data_from_portwine/scripts/functions_helper | 978 ++++++++++-------- data_from_portwine/scripts/setup.sh | 6 +- data_from_portwine/scripts/start.sh | 197 ++-- 8 files changed, 735 insertions(+), 662 deletions(-) delete mode 100644 data_from_portwine/locales/es/LC_MESSAGES/PortProton.mo delete mode 100644 data_from_portwine/locales/ru/LC_MESSAGES/PortProton.mo diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot index f39a0595..6c6a82b1 100644 --- a/data_from_portwine/locales/PortProton.pot +++ b/data_from_portwine/locales/PortProton.pot @@ -7,13 +7,13 @@ msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2024-09-15 15:29+0500\n" + "POT-Creation-Date: 2024-09-18 01:14+0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" + "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" msgid "A running PortProton session was detected.\\nDo you want to end the " @@ -291,6 +291,9 @@ msgstr "" msgid "REMIND ME LATER" msgstr "" +msgid "EXIT" +msgstr "" + msgid "Searching for .exe files... Please wait." msgstr "" @@ -317,9 +320,6 @@ msgid "d3dadapter9.so.1.0.0 - Not found in the system.\\nInstall the " "missing package: d3dadapter9" msgstr "" -msgid "EXIT" -msgstr "" - msgid "You will need to check internet connection,and\\npress Repeat for " "repeat download" msgstr "" @@ -958,10 +958,9 @@ msgstr "" msgid "Show temperature in Fahrenheit" msgstr "" -msgid "Show if GPU is throttling based on Power, current, temp or " - "\"other\" (Only shows if throttling is currently happening). " - "Currently disabled by default for Nvidia as it causes lag on 3000 " - "series" +msgid "Show if GPU is throttling based on Power, current, temp or other " + "(Only shows if throttling is currently happening). Currently " + "disabled by default for Nvidia as it causes lag on 3000 series" msgstr "" msgid "Same as throttling_status but displays throttling in the frametime " @@ -1246,15 +1245,16 @@ msgstr "" msgid "Change settings gamescope for" msgstr "" -#, sh-format -msgid "Gamescope is not detected on the system, to install it, run the " - "command in the terminal:\\n flatpak install -y runtime/org." +msgid "Gamescope is not detected on the system, to install it, run the " + "command in the terminal:\\nflatpak install -y runtime/org." "freedesktop.Platform.VulkanLayer.gamescope/x86_64/" - "${GAMESCOPE_VERSION}\\n (Can be selected and copied)" +msgstr "" + +msgid "(Can be selected and copied)" msgstr "" msgid "Gamescope is not detected on the system, please contact the " - "manufacturer of your distribution\\n or search the Internet for " + "manufacturer of your distribution\\nor search the Internet for " "information on how to install gamescope on your system." msgstr "" @@ -1549,18 +1549,14 @@ msgstr "" msgid "SAVE" msgstr "" -#, sh-format -msgid "PortProton v. ${install_ver}\n" - " scripts v. ${scripts_install_ver}" +msgid "scripts" msgstr "" -#, sh-format -msgid "https://linux-gaming.ru\n" - "\n" - "Copyright © $DATE Castro-Fidel (linux-gaming.ru)\n" - "\n" - "This program comes with absolutely no warranty.\n" - "See the License for details.\n" +msgid "Copyright" +msgstr "" + +msgid "This program comes with absolutely no warranty.\n" + "See the License for details." msgstr "" msgid "Author: Casro-Fidel (Mikhail Tergoev)\n" @@ -1568,12 +1564,10 @@ msgid "Author: Casro-Fidel (Mikhail Tergoev)\n" "Developer assistants and testers:" msgstr "" -#, sh-format -msgid "MIT License\n" - "\n" - "Copyright © $DATE Castro-Fidel (linux-gaming.ru)\n" - "\n" - "Permission is hereby granted, free of charge, to any person " +msgid "MIT License" +msgstr "" + +msgid "Permission is hereby granted, free of charge, to any person " "obtaining a copy\n" "of this software and associated documentation files (the " "\"Software\"), to deal\n" @@ -1601,14 +1595,14 @@ msgid "MIT License\n" "ARISING FROM,\n" "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER " "DEALINGS IN THE\n" - "SOFTWARE.\n" + "SOFTWARE." msgstr "" msgid "The project was supported:\n" "https://boosty.to/portwine-linux.ru" msgstr "" -msgid "The list will be updated...\n" +msgid "The list will be updated..." msgstr "" msgid "Do you want to join and help in the development of the project:" diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.mo b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.mo deleted file mode 100644 index 8b3c3d3fe9ac70ea9482ffb2ea08b972f1a528b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68148 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" -msgid "EXIT" -msgstr "SALIR" - msgid "" "You will need to check internet connection,and\\npress Repeat for repeat " "download" @@ -1165,10 +1166,11 @@ msgstr "" msgid "Show temperature in Fahrenheit" msgstr "Mostrar temperatura en Fahrenheit" +#, fuzzy msgid "" -"Show if GPU is throttling based on Power, current, temp or \"other\" (Only " -"shows if throttling is currently happening). Currently disabled by default " -"for Nvidia as it causes lag on 3000 series" +"Show if GPU is throttling based on Power, current, temp or other (Only shows " +"if throttling is currently happening). Currently disabled by default for " +"Nvidia as it causes lag on 3000 series" msgstr "" "Mostrar si la GPU está limitando basado en Potencia, corriente, temperatura " "u \"otro\" (Solo se muestra si actualmente está ocurriendo limitación). " @@ -1389,6 +1391,7 @@ msgstr "" "cuando pierden el enfoque, por lo que esto puede usarse para permitir que la " "aplicación se ejecute en segundo plano. (Configuraciones de Glide)" +#, fuzzy msgid "" "dgVoodoo2 settings\\nNOTE: To display help for each item, simply " "hover over the text" @@ -1624,21 +1627,24 @@ msgstr "" msgid "Change settings gamescope for" msgstr "Cambiar ajustes gamescope para" -#, sh-format +#, fuzzy msgid "" -"Gamescope is not detected on the system, to install it, run the command " -"in the terminal:\\n flatpak install -y runtime/org.freedesktop.Platform." -"VulkanLayer.gamescope/x86_64/${GAMESCOPE_VERSION}\\n (Can be selected and " -"copied)" +"Gamescope is not detected on the system, to install it, run the command in " +"the terminal:\\nflatpak install -y runtime/org.freedesktop.Platform." +"VulkanLayer.gamescope/x86_64/" msgstr "" " Gamescope no se detecta en el sistema, para instalarlo, ejecute el " "comando en el terminal:\\n flatpak install -y runtime/org.freedesktop." "Platform.VulkanLayer.gamescope/x86_64/${GAMESCOPE_VERSION}\\n (Se puede " "seleccionar y copiar)." +msgid "(Can be selected and copied)" +msgstr "" + +#, fuzzy msgid "" "Gamescope is not detected on the system, please contact the manufacturer " -"of your distribution\\n or search the Internet for information on how to " +"of your distribution\\nor search the Internet for information on how to " "install gamescope on your system." msgstr "" "Gamescope no se detecta en el sistema, póngase en contacto con el " @@ -1673,6 +1679,7 @@ msgstr "" msgid "Mesa vulkan WSI" msgstr "WSI mesa volcánica" +#, fuzzy msgid "" "Overrides the WSI present mode:\n" "fifo - First in, first out. Limits the frame rate + no tearing. (VSync)\n" @@ -2001,20 +2008,16 @@ msgstr "ATRÁS" msgid "SAVE" msgstr "AHORRAR" -#, sh-format -msgid "" -"PortProton v. ${install_ver}\n" -" scripts v. ${scripts_install_ver}" +#, fuzzy +msgid "scripts" +msgstr "Actualizar scripts:" + +msgid "Copyright" msgstr "" -#, sh-format msgid "" -"https://linux-gaming.ru\n" -"\n" -"Copyright © $DATE Castro-Fidel (linux-gaming.ru)\n" -"\n" "This program comes with absolutely no warranty.\n" -"See the License for details.\n" +"See the License for details." msgstr "" msgid "" @@ -2023,12 +2026,10 @@ msgid "" "Developer assistants and testers:" msgstr "" -#, sh-format +msgid "MIT License" +msgstr "" + msgid "" -"MIT License\n" -"\n" -"Copyright © $DATE Castro-Fidel (linux-gaming.ru)\n" -"\n" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" "of this software and associated documentation files (the \"Software\"), to " @@ -2051,7 +2052,7 @@ msgid "" "FROM,\n" "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN " "THE\n" -"SOFTWARE.\n" +"SOFTWARE." msgstr "" msgid "" @@ -2059,7 +2060,7 @@ msgid "" "https://boosty.to/portwine-linux.ru" msgstr "" -msgid "The list will be updated...\n" +msgid "The list will be updated..." msgstr "" msgid "Do you want to join and help in the development of the project:" @@ -2096,8 +2097,9 @@ msgstr "" msgid "ABOUT PORTPROTON" msgstr "" +#, fuzzy msgid "AUTORS" -msgstr "" +msgstr "EMULADORES" msgid "LICENSE" msgstr "" diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.mo b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.mo deleted file mode 100644 index 5dfdf2df1e6a75b19853d799ed4febb8668dd93f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93741 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ⅆ+7`!PX?DXMbCgw?*?DW{e3uDqUX23 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 V)p5Dg65}-vFBd3dadapter9" -msgid "EXIT" -msgstr "ВЫХОД" - msgid "" "You will need to check internet connection,and\\npress Repeat for repeat " "download" @@ -639,7 +639,7 @@ msgstr "" "Super + O: Уменьшение резкости FSR на 1\n" "Super + S: Снимок экрана (находится в /tmp/gamescope_DATE.png)\n" "Super + G: Переключение захвата клавиатуры\n" -"Super + C: Обновление буфера обмена\"" +"Super + C: Обновление буфера обмена" msgid "Change the version of WINDOWS emulation" msgstr "Изменить версию эмуляции WINDOWS" @@ -1176,10 +1176,11 @@ msgstr "" msgid "Show temperature in Fahrenheit" msgstr "Показывать температуру в градусах Фаренгейта" +#, fuzzy msgid "" -"Show if GPU is throttling based on Power, current, temp or \"other\" (Only " -"shows if throttling is currently happening). Currently disabled by default " -"for Nvidia as it causes lag on 3000 series" +"Show if GPU is throttling based on Power, current, temp or other (Only shows " +"if throttling is currently happening). Currently disabled by default for " +"Nvidia as it causes lag on 3000 series" msgstr "" "Показать, регулируется ли графический процессор в зависимости от мощности, " "тока, температуры или «другого» (показывает только то, происходит ли " @@ -1376,6 +1377,7 @@ msgstr "" "Включение данной опции помогает исправить зависание или вылетание в " "некоторых играх при сворачивании окна (Glide)" +#, fuzzy msgid "" "dgVoodoo2 settings\\nNOTE: To display help for each item, simply " "hover over the text" @@ -1596,21 +1598,23 @@ msgstr "" msgid "Change settings gamescope for" msgstr "Изменить настройки Gamescope для" -#, sh-format +#, fuzzy msgid "" -"Gamescope is not detected on the system, to install it, run the command " -"in the terminal:\\n flatpak install -y runtime/org.freedesktop.Platform." -"VulkanLayer.gamescope/x86_64/${GAMESCOPE_VERSION}\\n (Can be selected and " -"copied)" +"Gamescope is not detected on the system, to install it, run the command in " +"the terminal:\\nflatpak install -y runtime/org.freedesktop.Platform." +"VulkanLayer.gamescope/x86_64/" msgstr "" -"Gamescope не найден в системе, для его установки выполните команду в " +"Gamescope не найден в системе, для его установки выполните команду в " "терминале:\\n flatpak install -y runtime/org.freedesktop.Platform." -"VulkanLayer.gamescope/x86_64/${GAMESCOPE_VERSION}\\n (можно выделить и " -"скопировать)" +"VulkanLayer.gamescope/x86_64/" +msgid "(Can be selected and copied)" +msgstr "(можно выделить и скопировать)" + +#, fuzzy msgid "" "Gamescope is not detected on the system, please contact the manufacturer " -"of your distribution\\n or search the Internet for information on how to " +"of your distribution\\nor search the Internet for information on how to " "install gamescope on your system." msgstr "" "Gamescope не найден в системе, обратитесь к производителю вашего " @@ -1644,6 +1648,7 @@ msgstr "Ограничение частоты кадров (кадров в се msgid "Mesa vulkan WSI" msgstr "Режим работы окна" +#, fuzzy msgid "" "Overrides the WSI present mode:\n" "fifo - First in, first out. Limits the frame rate + no tearing. (VSync)\n" @@ -1973,29 +1978,18 @@ msgstr "НАЗАД" msgid "SAVE" msgstr "СОХРАНИТЬ" -#, sh-format -msgid "" -"PortProton v. ${install_ver}\n" -" scripts v. ${scripts_install_ver}" -msgstr "" -"PortProton v. ${install_ver}\n" -" версия v. ${scripts_install_ver}" +msgid "scripts" +msgstr "версия" + +msgid "Copyright" +msgstr "Авторские права" -#, sh-format msgid "" -"https://linux-gaming.ru\n" -"\n" -"Copyright © $DATE Castro-Fidel (linux-gaming.ru)\n" -"\n" "This program comes with absolutely no warranty.\n" -"See the License for details.\n" +"See the License for details." msgstr "" -"https://linux-gaming.ru\n" -"\n" -"Авторские права © $DATE Castro-Fidel (linux-gaming.ru)\n" -"\n" "Эта программа поставляется без каких-либо гарантий.\n" -"Подробнее см. в Лицензия.\n" +"Подробнее см. в Лицензия." msgid "" "Author: Casro-Fidel (Mikhail Tergoev)\n" @@ -2006,12 +2000,10 @@ msgstr "" "\n" "Помощники разработчика и тестировщики:" -#, sh-format +msgid "MIT License" +msgstr "Лицензия Массачусетского технологического института (MIT License)" + msgid "" -"MIT License\n" -"\n" -"Copyright © $DATE Castro-Fidel (linux-gaming.ru)\n" -"\n" "Permission is hereby granted, free of charge, to any person obtaining a " "copy\n" "of this software and associated documentation files (the \"Software\"), to " @@ -2034,12 +2026,8 @@ msgid "" "FROM,\n" "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN " "THE\n" -"SOFTWARE.\n" +"SOFTWARE." msgstr "" -"Лицензия Массачусетского технологического института (MIT License)\n" -"\n" -"Авторские права © $DATE Castro-Fidel (linux-gaming.ru)\n" -"\n" "Настоящим предоставляется бесплатное разрешение любому лицу, получившему " "копию данного\n" "программного обеспечения и связанных с ним файлов документации (Программное\n" @@ -2068,7 +2056,7 @@ msgstr "" "ВОЗНИКАЮЩАЯ ИЗ\n" "ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ " "СДЕЛКАМИ В\n" -"ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.\n" +"ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ." msgid "" "The project was supported:\n" @@ -2077,8 +2065,8 @@ msgstr "" "Проект поддержали:\n" "https://boosty.to/portwine-linux.ru" -msgid "The list will be updated...\n" -msgstr "Список будет дополняться...\n" +msgid "The list will be updated..." +msgstr "Список будет дополняться..." msgid "Do you want to join and help in the development of the project:" msgstr "Хотите присоединится и помочь в развитии проекта:" @@ -2147,6 +2135,14 @@ msgstr "ПРИСОЕДЕНИТЬСЯ" msgid "THIRD PARTY LIBRARIES" msgstr "БИБЛИОТЕКИ" +#, sh-format +#~ msgid "" +#~ "PortProton v. ${install_ver}\n" +#~ "scripts v. ${scripts_install_ver}" +#~ msgstr "" +#~ "PortProton v. ${install_ver}\n" +#~ "версия v. ${scripts_install_ver}" + #~ msgid "Open game folder" #~ msgstr "Открыть папку с игрой" diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 60b3d8c2..3980b024 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -68,7 +68,9 @@ change_locale () { else LANGUAGE=$(echo "$out" | cut -d '|' -f2) echo "${LANGUAGE}" > "${PORT_WINE_TMP_PATH}/PortProton_loc" + create_translations fi + restart_pp fi export LANGUAGE @@ -88,22 +90,34 @@ change_locale () { export LANGUAGE_GIF="en" ;; esac + } export -f change_locale generate_pot () { + sed 's/{translations\[/(gettext \"/g' functions_helper > functions_helper_tmp + sed -i 's/]}/")/g' functions_helper_tmp + + sed 's/{translations\[/(gettext \"/g' start.sh > start.sh_tmp + sed -i 's/]}/")/g' start.sh_tmp + + sed 's/{translations\[/(gettext \"/g' setup.sh > setup.sh_tmp + sed -i 's/]}/")/g' setup.sh_tmp + #fixes когда присходит предупреждение: синтаксис $"..." запрещен по соображениям безопасности; используйте eval_gettext + #удаляется строка без переводов и этим предупреждением (сейчас их всего 3) + sed -i '/basename_portwine_exe/d' functions_helper_tmp for lang in $LANGUAGES_LIST do echo "${lang}" create_new_dir "${PORT_WINE_PATH}/data/locales/${lang}/LC_MESSAGES/" LANG_PO="${PORT_WINE_PATH}/data/locales/${lang}/LC_MESSAGES/PortProton.po" - LANG_MO="${PORT_WINE_PATH}/data/locales/${lang}/LC_MESSAGES/PortProton.mo" + #LANG_MO="${PORT_WINE_PATH}/data/locales/${lang}/LC_MESSAGES/PortProton.mo" TEMPLATE_POT="${PORT_WINE_PATH}/data/locales/PortProton.pot" pushd "${PORT_WINE_PATH}" 1>/dev/null || fatal xgettext --no-location --from-code=UTF-8 --language Shell -i \ - "data/scripts/start.sh" \ - "data/scripts/setup.sh" \ - "data/scripts/functions_helper" \ + "data/scripts/start.sh_tmp" \ + "data/scripts/setup.sh_tmp" \ + "data/scripts/functions_helper_tmp" \ -o "$TEMPLATE_POT" popd 1>/dev/null || fatal if [[ -f "$LANG_PO" ]] ; then @@ -113,14 +127,87 @@ generate_pot () { echo "create $LANG_PO file" msginit --input="$TEMPLATE_POT" --locale="${lang}" --output="$LANG_PO" fi - msgfmt --output-file="$LANG_MO" "$LANG_PO" + #msgfmt --output-file="$LANG_MO" "$LANG_PO" done + try_remove_file "${PORT_SCRIPTS_PATH}/start.sh_tmp" + try_remove_file "${PORT_SCRIPTS_PATH}/setup.sh_tmp" + try_remove_file "${PORT_SCRIPTS_PATH}/functions_helper_tmp" + try_remove_dir "${PORT_SCRIPTS_PATH}/translations" } export -f generate_pot -eval_gettext () { - gettext "$1" | (export PATH `envsubst --variables "$1"`; envsubst "$1") +create_translations () { + if [[ ! -d "${PORT_SCRIPTS_PATH}/translations" ]] ; then + create_new_dir "${PORT_SCRIPTS_PATH}/translations" + fi + cat << EOF > "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" +#!/usr/bin/env bash +TRANSLATIONS_VER=$scripts_install_ver +declare -A translations=( +EOF + if [[ $LANGUAGE == "en" ]] ; then + po_file="${PORT_WINE_PATH}/data/locales/ru/LC_MESSAGES/PortProton.po" + else + po_file="${PORT_WINE_PATH}/data/locales/$LANGUAGE/LC_MESSAGES/PortProton.po" + fi + + while [[ ! "$line" =~ msgid ]]; do + read -r line + while [[ "$line" =~ msgid ]]; do + unset msgid + msgid="$line" + read -r line + while [[ ! "$line" =~ msgstr ]] ; do + msgid+="$line" + read -r line + done + if [[ "$line" =~ msgstr ]]; then + if [[ $LANGUAGE == "en" ]] ; then + msgstr="$msgid" + else + unset msgstr + msgstr="$line" + read -r line + while [[ ! "$line" =~ msgid ]] ; do + msgstr+="$line" + read -r line + done + fi + fi + msgstr=${msgstr//"msgstr "/} + msgstr=${msgstr//" "/-_-} + msgstr=${msgstr//"\n"\"\"/+_+} + msgstr=${msgstr//\"\"/} + msgstr=${msgstr//#*/} + msgstr=${msgstr//"*"/#_#} + msgid=${msgid//"msgid "/} + msgid=${msgid//" "/-_-} + msgid=${msgid//"\n"\"\"/+_+} + msgid=${msgid//\"\"/} + msgid=${msgid//#*/} + msgid=${msgid//"*"/#_#} + if [[ $msgid != "" ]] ; then + if [[ -n $msgstr ]] ; then + echo \["$msgid"\]="$msgstr" >> "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + else + echo \["$msgid"\]="$msgid" >> "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + fi + fi + if [[ -z $msgid ]] && [[ -z $msgstr ]] ; then + echo ")" >> "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + sed -i 's/+_+/\n/g' "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + sed -i 's/#_#/\*/g' "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + sed -i 's/-_-/ /g' "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + if [[ $LANGUAGE == "en" ]] ; then + sed -i 's/msgid //g' "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + fi + return 0 + fi + done + done < "$po_file" + } +export -f create_translations try_copy_file () { if [[ ! -f "$1" ]] ; then print_info "file $1 not found for copy" && return 1 @@ -343,7 +430,7 @@ try_download () { curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \ -H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o "$dest" 2>&1 | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \ - "$pw_yad" --progress --text="$(gettext "Downloading") $filename" --auto-close --no-escape \ + "$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \ --auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE" fi @@ -354,7 +441,7 @@ try_download () { curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \ -H 'Pragma: no-cache' -L ${SECOND_URL[@]} -o "$dest" 2>&1 | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \ - "$pw_yad" --progress --text="$(gettext "Downloading") $filename" --auto-close --no-escape \ + "$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \ --auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE" fi @@ -679,7 +766,7 @@ pw_reinstall_pp () { echo "" exit 1 fi - elif ! yad_question "$(gettext "Do you really want to reinstall PortProton?\nFor this, an internet connection will be required.")" + elif ! yad_question "${translations[Do you really want to reinstall PortProton?\\nFor this, an internet connection will be required.]}" then exit 1 fi pw_clear_pfx @@ -1307,7 +1394,7 @@ pw_check_and_download_plugins () { fi else pw_notify_send -i info \ - "$(gettext "Please wait for update PortProton")" + "${translations[Please wait for update PortProton]}" if try_download "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" \ "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" silent ; then if unpack "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then @@ -1323,7 +1410,7 @@ pw_check_and_download_plugins () { else print_error "Failed updating PortProton!" pw_notify_send -i error \ - "$(gettext "Failed updating PortProton!")" + "${translations[Failed updating PortProton!]}" fi fi fi @@ -1463,7 +1550,7 @@ pw_init_db () { fi done PORTWINE_DB_FILE="${PORT_SCRIPTS_PATH}/portwine_db"/$("${pw_yad}" --text-align=center \ - --text "$(gettext "More than one DB file found for the application being launched.\nSelect the required one, or delete the extra DB file before the next run.\n")" --borders="${YAD_BORDERS}" --form \ + --text "${translations[More than one DB file found for the application being launched.\\nSelect the required one, or delete the extra DB file before the next run.\\n]}" --borders="${YAD_BORDERS}" --form \ --title "Database file selection..." --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --form --separator="" \ --field="DB FILE: :CB" "${ADD_CB_DBFILE}" 2>/dev/null) if [[ "$?" == "1" || "$?" == "252" ]] ; then exit 0 ; fi @@ -1685,30 +1772,30 @@ pw_port_update () { fi if [[ "${pw_yad}" == "not_found" ]] \ || [[ "$PW_CHANGE_BRANCH" == "1" ]] ; then - xcsd="$(gettext "UPDATING NOW")" + xcsd="${translations[UPDATING NOW]}" unset PW_CHANGE_BRANCH else curl -s --list-only "${URL_FOR_CHANGELOG}/${PW_CHANGELOG_FILE}" | tee "${PORT_WINE_TMP_PATH}/curent_var_ver" CHANGLOG_NEWS=$(sed "/Scripts version ${scripts_install_ver}/,$ d" "${PORT_WINE_TMP_PATH}/curent_var_ver" | sed '1,/---/ d' ) - xcsd=$("${pw_yad}" --title "$(gettext "Update scripts:") v.(${scripts_install_ver}${BRANCH_VERSION})" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + xcsd=$("${pw_yad}" --title "${translations[Update scripts:]} v.(${scripts_install_ver}${BRANCH_VERSION})" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --form --separator='%%%' --width=1000 --height=500 \ --field=":TXT" "${CHANGLOG_NEWS}" \ - --button="$(gettext "DO NOT REMIND ME")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":16 \ - --button="$(gettext "REMIND ME LATER")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":18 \ - --button="$(gettext "UPDATING NOW")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":20 2>/dev/null) + --button="${translations[DO NOT REMIND ME]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":16 \ + --button="${translations[REMIND ME LATER]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":18 \ + --button="${translations[UPDATING NOW]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":20 2>/dev/null) YAD_STATUS="$?" - # --button="$(gettext "EXIT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ + # --button="${translations[EXIT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ case "${YAD_STATUS}" in 1|252) exit 0 ;; - 16) xcsd="$(gettext "DO NOT REMIND ME")" ;; - 18) xcsd="$(gettext "REMIND ME LATER")" ;; - 20) xcsd="$(gettext "UPDATING NOW")" ;; + 16) xcsd="${translations[DO NOT REMIND ME]}" ;; + 18) xcsd="${translations[REMIND ME LATER]}" ;; + 20) xcsd="${translations[UPDATING NOW]}" ;; esac fi case $xcsd in - "$(gettext "UPDATING NOW")") + "${translations[UPDATING NOW]}") echo "######################################################" print_info "Update scripts..." try_remove_file "${PORT_WINE_TMP_PATH}/PortWINE-${BRANCH}.tar.gz" @@ -1731,9 +1818,9 @@ pw_port_update () { else yad_error_download && pw_port_update || exit 1 fi ;; - "$(gettext "REMIND ME LATER")") + "${translations[REMIND ME LATER]}") echo " " ;; - "$(gettext "DO NOT REMIND ME")") + "${translations[DO NOT REMIND ME]}") echo "0" > "${PORT_WINE_TMP_PATH}/scripts_update_notifier" ;; esac fi @@ -1886,7 +1973,7 @@ pw_find_exe () { PW_EXCLUDE_EXE_FIND='(windows|explorer|anticheat|programdata|redist|setup|.ppdb|unin|error|crash|handler|install|/jre/|steam|uploader|eac|netframe)' PW_PATH_FOR_FIND="${PORT_WINE_PATH}/data/prefixes/" - pw_start_progress_bar_block "$(gettext "Searching for .exe files... Please wait.")" + pw_start_progress_bar_block "${translations[Searching for .exe files... Please wait.]}" find "${PW_PATH_FOR_FIND}" -type f -name '*.exe' ${PW_FIND_TIME} | grep -viE ${PW_EXCLUDE_EXE_FIND} | \ awk -F"/prefixes/" '{print $2}' > "${PW_TMPFS_PATH}/tmp_yad_find_exe" pw_stop_progress_bar @@ -1898,11 +1985,11 @@ pw_find_exe () { IFS="%" PW_SET_FIND_EXE="$("${pw_yad}" --height="500" --width="800" --list --text-align=center \ - --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$(gettext "Create shortcut for...")" \ - --text="\n$(gettext "Choose the .exe file for which you need to create a shortcut and click OK.\n")" \ - --column="$(gettext "Choose path to .exe file:")" ${FIND_TO_GUI} \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="$(gettext "OK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null)" + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[Create shortcut for...]}" \ + --text="\n${translations[Choose the .exe file for which you need to create a shortcut and click OK.\\n]}" \ + --column="${translations[Choose path to .exe file:]}" ${FIND_TO_GUI} \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null)" YAD_STATUS="$?" if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then if [[ -z "${PW_SET_FIND_EXE}" ]] ; then @@ -2084,7 +2171,7 @@ start_portwine () { pw_update_pfx_cover_gui unpack "${PW_PLUGINS_PATH}/blank_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent pw_wineboot -i - elif yad_question "$(gettext "Do you want to installing recommended libraries in the new prefix:") ${PW_PREFIX_NAME}" ; then + elif yad_question "${translations[Do you want to installing recommended libraries in the new prefix:]} ${PW_PREFIX_NAME}" ; then pw_update_pfx_cover_gui unpack "${PW_PLUGINS_PATH}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent pw_wineboot -r @@ -2754,7 +2841,7 @@ start_portwine () { print_info "D3D_MODULE_PATH=${D3D_MODULE_PATH}" else pw_stop_progress_bar - yad_error "$(gettext "d3dadapter9.so.1.0.0 - Not found in the system.\nInstall the missing package: d3dadapter9")" + yad_error "${translations[d3dadapter9.so.1.0.0 - Not found in the system.\\nInstall the missing package: d3dadapter9]}" stop_portwine fi else @@ -3310,7 +3397,7 @@ yad_info () { --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/info.svg" \ --text-align=center --fixed \ - --button="$(gettext "OK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null + --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null } export -f yad_info @@ -3325,7 +3412,7 @@ yad_error () { --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/error.svg" \ --text-align=center --fixed \ - --button="$(gettext "EXIT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null + --button="${translations[EXIT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null } export -f yad_error @@ -3334,13 +3421,13 @@ yad_error_download () { local pw_yad="yad" command -v "${pw_yad}" &>/dev/null || fatal "yad not found" fi - "${pw_yad}" --text "$(gettext "You will need to check internet connection,and\npress Repeat for repeat download")" \ - --width=400 --borders=15 --title "$(gettext "Error")" \ + "${pw_yad}" --text "${translations[You will need to check internet connection,and\\npress Repeat for repeat download]}" \ + --width=400 --borders=15 --title "${translations[Error]}" \ --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/download.svg" \ --no-wrap --text-align=center \ - --button="$(gettext "SKIP")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="$(gettext "REPEAT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null + --button="${translations[SKIP]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[REPEAT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null [[ "$?" != 0 ]] && return 1 || return 0 } @@ -3350,12 +3437,12 @@ yad_question () { local pw_yad="yad" command -v "${pw_yad}" &>/dev/null || fatal "yad not found" fi - "${pw_yad}" --text "${1}" --width=400 --height=150 --borders=15 --title "$(gettext "Choices")" \ + "${pw_yad}" --text "${1}" --width=400 --height=150 --borders=15 --title "${translations[Choices]}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/question.svg" \ --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --no-wrap --text-align=center --fixed \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="$(gettext "OK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null [[ "$?" != 0 ]] && return 1 || return 0 } @@ -3386,12 +3473,12 @@ pw_start_progress_bar_cover_block () { pw_update_pfx_cover_gui () { if [[ "$1" == "winetricks" ]] ; then - TAB_PLACE="--tab=$(gettext "TERMINAL")!$PW_GUI_ICON_PATH/$TAB_SIZE.png --tab=$(gettext "LOGO")!$PW_GUI_ICON_PATH/$TAB_SIZE.png" + TAB_PLACE="--tab=${translations[TERMINAL]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png --tab=${translations[LOGO]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png" TAB_N1=2 TAB_N2=1 YAD_UNDECORATED="" else - TAB_PLACE="--tab=$(gettext "LOGO")!$PW_GUI_ICON_PATH/$TAB_SIZE.png --tab=$(gettext "TERMINAL")!$PW_GUI_ICON_PATH/$TAB_SIZE.png" + TAB_PLACE="--tab=${translations[LOGO]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png --tab=${translations[TERMINAL]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png" TAB_N1=1 TAB_N2=2 YAD_UNDECORATED="--undecorated" @@ -3458,7 +3545,7 @@ pw_start_progress_bar_block () { pw_start_progress_bar_install_game () { if ! check_start_from_steam ; then - "${pw_yad}" --progress-old --text="$(gettext "Please wait. Installing the") $@ + "${pw_yad}" --progress-old --text="${translations[Please wait. Installing the]} $@ " --pulsate --hide-text --borders="$PROGRESS_BAR_BORDERS_SIZE" \ --no-buttons --undecorated --skip-taskbar \ --no-escape --text-align="center" --height=90 --fixed \ @@ -3497,7 +3584,7 @@ export -f pw_stop_progress_bar_cover_block open_changelog () { [[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en" - "${pw_yad}" --title="$(gettext "CHANGELOG")" --no-buttons \ + "${pw_yad}" --title="${translations[CHANGELOG]}" --no-buttons \ --text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" &>/dev/null @@ -3549,10 +3636,10 @@ pw_tray_icon () { --command="bash -c tray_icon_click" \ --tooltip="PortProton" \ --icon-size=32 --menu="| \ - $(gettext "WINEFILE")!bash -c pw_tray_winefile!"$PW_GUI_ICON_PATH/wine_file.svg"|| \ - $(gettext "TASKMGR")!bash -c pw_tray_taskmgr!"$PW_GUI_ICON_PATH/wine_system.svg"|| \ - $(gettext "CHANGELOG")!bash -c open_changelog!"$PW_GUI_ICON_PATH/history.svg"|| \ - $(gettext "FORCE EXIT")!bash -c tray_icon_click_exit!"$PW_GUI_ICON_PATH/close.svg"||" 2>/dev/null & + ${translations[WINEFILE]}!bash -c pw_tray_winefile!"$PW_GUI_ICON_PATH/wine_file.svg"|| \ + ${translations[TASKMGR]}!bash -c pw_tray_taskmgr!"$PW_GUI_ICON_PATH/wine_system.svg"|| \ + ${translations[CHANGELOG]}!bash -c open_changelog!"$PW_GUI_ICON_PATH/history.svg"|| \ + ${translations[FORCE EXIT]}!bash -c tray_icon_click_exit!"$PW_GUI_ICON_PATH/close.svg"||" 2>/dev/null & else PW_GUI_TRAY_PATH="${PW_GUI_THEMES_PATH}/tray" env LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" "${PW_GUI_TRAY_PATH}/tray_gui_pp" & @@ -3585,7 +3672,7 @@ gui_proton_downloader () { return 0 fi - pw_start_progress_bar_block "$(gettext "Check new version WINE...")" + pw_start_progress_bar_block "${translations[Check new version WINE...]}" # PROTON_GE export PROTON_GE_GIT=($(curl -s "https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases" | grep "browser_download_url.*\.tar\.gz" | cut -d \" -f 4)) @@ -3632,7 +3719,7 @@ gui_proton_downloader () { pw_stop_progress_bar if [[ -z "${PROTON_PW_GIT}" ]] ; then - yad_error "$(gettext "Error: check wine.")" + yad_error "${translations[Error: check wine.]}" restart_pp fi @@ -3659,55 +3746,55 @@ gui_proton_downloader () { "${pw_yad}" --plug=$KEY_WINE --tabnum=1 --list --checklist --separator="" \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --column "$(gettext "Set")" \ - --column "$(gettext "Select WINE for download:")" \ + --column "${translations[Set]}" \ + --column "${translations[Select WINE for download:]}" \ $TMP_PROTON_PW_GIT \ 1>> "${PW_TMPFS_PATH}/tmp_set_wine" \ 2>/dev/null & "${pw_yad}" --plug=$KEY_WINE --tabnum=2 --list --checklist --separator="" \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --column "$(gettext "Set")" \ - --column "$(gettext "Select WINE for download:")" \ + --column "${translations[Set]}" \ + --column "${translations[Select WINE for download:]}" \ $TMP_PROTON_KR_GIT \ 1>> "${PW_TMPFS_PATH}/tmp_set_wine" \ 2>/dev/null & "${pw_yad}" --plug=$KEY_WINE --tabnum=3 --list --checklist --separator="" \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --column "$(gettext "Set")" \ - --column "$(gettext "Select WINE for download:")" \ + --column "${translations[Set]}" \ + --column "${translations[Select WINE for download:]}" \ $TMP_PROTON_GE_GIT \ 1>> "${PW_TMPFS_PATH}/tmp_set_wine" \ 2>/dev/null & "${pw_yad}" --plug=$KEY_WINE --tabnum=4 --list --checklist --separator="" \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --column "$(gettext "Set")" \ - --column "$(gettext "Select WINE for download:")" \ + --column "${translations[Set]}" \ + --column "${translations[Select WINE for download:]}" \ $TMP_PROTON_CU_GIT \ 1>> "${PW_TMPFS_PATH}/tmp_set_wine" \ 2>/dev/null & "${pw_yad}" --plug=$KEY_WINE --tabnum=5 --list --checklist --separator="" \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --column "$(gettext "Set")" \ - --column "$(gettext "Select installed WINE for delete:")" \ + --column "${translations[Set]}" \ + --column "${translations[Select installed WINE for delete:]}" \ $TMP_INSTALLED_WINE \ 1> "${PW_TMPFS_PATH}/tmp_installed_wine_set" \ 2>/dev/null & "${pw_yad}" --key=$KEY_WINE --notebook --width=500 --height=600 --text-align=center \ --gui-type="settings-notebook" \ - --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$(gettext "WINE MANAGER")" --separator="" --expand \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[WINE MANAGER]}" --separator="" --expand \ --tab-pos="top" \ --tab="PROTON-LG"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ --tab="WINE-KRON4EK"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ --tab="PROTON-GE"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ --tab="WINE-GE-CUSTOM"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "INSTALLED")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="$(gettext "OK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":0 2>/dev/null + --tab="${translations[INSTALLED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":0 2>/dev/null YAD_WINE_STATUS="$?" if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then restart_pp @@ -3818,46 +3905,45 @@ gui_edit_db () { # PW_FORCE_USE_VSYNC PW_HEAP_DELAY_FREE -if [[ "${SKIP_EDIT_DB_TEXT_INFO}" != "1" ]] ; then - export PW_DGVOODOO2_INFO=$(gettext 'Enable dgVoodoo2. Forced use all dgVoodoo2 libs (Glide 2.11-3.1, DirectDraw 1-7, Direct3D 2-9) on all 3D API. For WineD3D OpenGL need use WineLG (For Gallium Nine and Zink use too)') - export PW_DINPUT_PROTOCOL_INFO=$(gettext 'Force use DirectInput protocol instead of XInput') - export PW_USE_NATIVE_WAYLAND_INFO=$(gettext 'Enable experemental native Wayland support (need special wine build to work)') - export PW_VKBASALT_INFO=$(gettext 'Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)') - export PW_NO_ESYNC_INFO=$(gettext 'Do not use in-process synchronization primitives based on eventfd. (It is recommended not to change the value.)') - export PW_NO_FSYNC_INFO=$(gettext 'Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems without FUTEX_WAIT_MULTIPLE support) (It is recommended not to change the value)') - export PW_USE_RAY_TRACING_INFO=$(gettext 'Enable vkd3d support - Ray Tracing') - export PW_FIX_VIDEO_IN_GAME_INFO=$(gettext 'Required for video playback in some games so that it is not distorted (usually colored pink)') - export PW_VULKAN_NO_ASYNC_INFO=$(gettext 'Disable asynchronous calls for VULKAN and DXVK modes') - export PW_USE_NVAPI_AND_DLSS_INFO=$(gettext 'Enable DLSS on supported NVIDIA graphics cards') - export PW_OLD_GL_STRING_INFO=$(gettext 'Forced use of older versions of OpenGL') - export PW_HIDE_NVIDIA_GPU_INFO=$(gettext 'Disguise all features used for NVIDIA graphics cards') - export PW_FORCE_USE_VSYNC_INFO=$(gettext 'Forced activation of vertical sync') - export PW_VIRTUAL_DESKTOP_INFO=$(gettext 'Enable the application to run in the WINE virtual desktop') - export PW_USE_TERMINAL_INFO=$(gettext 'Run the application in the terminal') - export PW_HEAP_DELAY_FREE_INFO=$(gettext 'Include a delay in releasing some memory to bypass errors associated with using the application after the memory is released') - export PW_NO_WRITE_WATCH_INFO=$(gettext 'A very dangerous way to hack the memory write timer in ntdll. This improves the performance of some very specific games. (It is recommended not to change the value.)') - export PW_GUI_DISABLED_CS_INFO=$(gettext 'Disable the window for selecting startup modes and WINE versions') - export PW_USE_GSTREAMER_INFO=$(gettext 'Use Gstreamer to output clips in games (WMF support)') - export PW_FORCE_LARGE_ADDRESS_AWARE_INFO=$(gettext 'Increases RAM usage limits for 32-bit applications from two to four gigabytes') - export PW_USE_RUNTIME_INFO=$(gettext 'Use container launch mode (It is recommended not to change the value)') - export PW_MANGOHUD_INFO=$(gettext 'Using FPS and system load monitoring (Turns on and off by the key combination - right Shift + F12)') - export PW_USE_GAMEMODE_INFO=$(gettext 'Using automatic system optimization to improve performance in games (provided the gamemode package is installed on the system)') - export PW_USE_WINE_DXGI_INFO=$(gettext 'Forced use of built-in DXGI library (in rare cases it solves problems with DX12 games)') - export PW_MANGOHUD_USER_CONF_INFO=$(gettext 'Forced use of MANGOHUD system settings (GOverlay, etc.)') - export PW_VKBASALT_USER_CONF_INFO=$(gettext 'Forced use of VKBASALT system settings (GOverlay, etc.)') - export PW_USE_D3D_EXTRAS_INFO=$(gettext 'Enable forced use of third-party DirectX libraries') - export PW_USE_WINDOWS_7_INFO=$(gettext 'Change the version of WINDOWS 10 to WINDOWS 7 in the prefix') - export PW_USE_SHADER_CACHE_INFO=$(gettext 'Use WINE shader caching (disable only if there are microfreezes in the game)') - export PW_WINE_FULLSCREEN_FSR_INFO=$(gettext 'Works while using any version of ProtonGE in full screen mode at a resolution below the standard screen') - export PW_USE_FAKE_DLSS_INFO=$(gettext 'Enable DLSS translator in FSR 2 in DirectX 12 games (CyberFSR2)') - export PW_USE_EAC_AND_BE_INFO=$(gettext 'Enable Easy Anti-Cheat and BattlEye Anti-Cheat runtimes (required if game used this anti-cheats)') - export PW_REDUCE_PULSE_LATENCY_INFO=$(gettext 'Reduce pulseaudio latency to fix intermittent sound') - export PW_USE_US_LAYOUT_INFO=$(gettext 'Forced use of the us layout (useful for games in which the control works correctly only on the us layout)') - export PW_RESTORE_RESOLUTION_INFO=$(gettext 'Remember the screen resolution when starting the game and return it when closing (useful for games that change the screen resolution when closing)') - export PW_USE_SYSTEM_VK_LAYERS_INFO=$(gettext 'Use system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers') - export PW_USE_OBS_VKCAPTURE_INFO=$(gettext 'Enable the ability to write to OBS Studio using obs-vkcapture (ATTENTION: the forced use of system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers will be enabled)') - export PW_DISABLE_COMPOSITING_INFO=$(gettext 'Disable desktop compositing (effects). It often improves performance.') - export PW_GAMESCOPE_INFO=$(gettext 'Super + F : Toggle fullscreen + PW_DGVOODOO2_INFO=${translations[Enable dgVoodoo2. Forced use all dgVoodoo2 libs (Glide 2.11-3.1, DirectDraw 1-7, Direct3D 2-9) on all 3D API. For WineD3D OpenGL need use WineLG (For Gallium Nine and Zink use too)]} + PW_DINPUT_PROTOCOL_INFO=${translations[Force use DirectInput protocol instead of XInput]} + PW_USE_NATIVE_WAYLAND_INFO=${translations[Enable experemental native Wayland support (need special wine build to work)]} + PW_VKBASALT_INFO=${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]} + PW_NO_ESYNC_INFO=${translations[Do not use in-process synchronization primitives based on eventfd. (It is recommended not to change the value.)]} + PW_NO_FSYNC_INFO=${translations[Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems without FUTEX_WAIT_MULTIPLE support) (It is recommended not to change the value)]} + PW_USE_RAY_TRACING_INFO=${translations[Enable vkd3d support - Ray Tracing]} + PW_FIX_VIDEO_IN_GAME_INFO=${translations[Required for video playback in some games so that it is not distorted (usually colored pink)]} + PW_VULKAN_NO_ASYNC_INFO=${translations[Disable asynchronous calls for VULKAN and DXVK modes]} + PW_USE_NVAPI_AND_DLSS_INFO=${translations[Enable DLSS on supported NVIDIA graphics cards]} + PW_OLD_GL_STRING_INFO=${translations[Forced use of older versions of OpenGL]} + PW_HIDE_NVIDIA_GPU_INFO=${translations[Disguise all features used for NVIDIA graphics cards]} + PW_FORCE_USE_VSYNC_INFO=${translations[Forced activation of vertical sync]} + PW_VIRTUAL_DESKTOP_INFO=${translations[Enable the application to run in the WINE virtual desktop]} + PW_USE_TERMINAL_INFO=${translations[Run the application in the terminal]} + PW_HEAP_DELAY_FREE_INFO=${translations[Include a delay in releasing some memory to bypass errors associated with using the application after the memory is released]} + PW_NO_WRITE_WATCH_INFO=${translations[A very dangerous way to hack the memory write timer in ntdll. This improves the performance of some very specific games. (It is recommended not to change the value.)]} + PW_GUI_DISABLED_CS_INFO=${translations[Disable the window for selecting startup modes and WINE versions]} + PW_USE_GSTREAMER_INFO=${translations[Use Gstreamer to output clips in games (WMF support)]} + PW_FORCE_LARGE_ADDRESS_AWARE_INFO=${translations[Increases RAM usage limits for 32-bit applications from two to four gigabytes]} + PW_USE_RUNTIME_INFO=${translations[Use container launch mode (It is recommended not to change the value)]} + PW_MANGOHUD_INFO=${translations[Using FPS and system load monitoring (Turns on and off by the key combination - right Shift + F12)]} + PW_USE_GAMEMODE_INFO=${translations[Using automatic system optimization to improve performance in games (provided the gamemode package is installed on the system)]} + PW_USE_WINE_DXGI_INFO=${translations[Forced use of built-in DXGI library (in rare cases it solves problems with DX12 games)]} + PW_MANGOHUD_USER_CONF_INFO=${translations[Forced use of MANGOHUD system settings (GOverlay, etc.)]} + PW_VKBASALT_USER_CONF_INFO=${translations[Forced use of VKBASALT system settings (GOverlay, etc.)]} + PW_USE_D3D_EXTRAS_INFO=${translations[Enable forced use of third-party DirectX libraries]} + PW_USE_WINDOWS_7_INFO=${translations[Change the version of WINDOWS 10 to WINDOWS 7 in the prefix]} + PW_USE_SHADER_CACHE_INFO=${translations[Use WINE shader caching (disable only if there are microfreezes in the game)]} + PW_WINE_FULLSCREEN_FSR_INFO=${translations[Works while using any version of ProtonGE in full screen mode at a resolution below the standard screen]} + PW_USE_FAKE_DLSS_INFO=${translations[Enable DLSS translator in FSR 2 in DirectX 12 games (CyberFSR2)]} + PW_USE_EAC_AND_BE_INFO=${translations[Enable Easy Anti-Cheat and BattlEye Anti-Cheat runtimes (required if game used this anti-cheats)]} + PW_REDUCE_PULSE_LATENCY_INFO=${translations[Reduce pulseaudio latency to fix intermittent sound]} + PW_USE_US_LAYOUT_INFO=${translations[Forced use of the us layout (useful for games in which the control works correctly only on the us layout)]} + PW_RESTORE_RESOLUTION_INFO=${translations[Remember the screen resolution when starting the game and return it when closing (useful for games that change the screen resolution when closing)]} + PW_USE_SYSTEM_VK_LAYERS_INFO=${translations[Use system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers]} + PW_USE_OBS_VKCAPTURE_INFO=${translations[Enable the ability to write to OBS Studio using obs-vkcapture (ATTENTION: the forced use of system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers will be enabled)]} + PW_DISABLE_COMPOSITING_INFO=${translations[Disable desktop compositing (effects). It often improves performance.]} + PW_GAMESCOPE_INFO=${translations[Super + F : Toggle fullscreen Super + N : Toggle nearest neighbour filtering Super + U : Toggle FSR upscaling Super + Y : Toggle NIS upscaling @@ -3865,10 +3951,7 @@ if [[ "${SKIP_EDIT_DB_TEXT_INFO}" != "1" ]] ; then Super + O : Decrease FSR sharpness by 1 Super + S : Take screenshot (currently goes to /tmp/gamescope_DATE.png) Super + G : Toggle keyboard grab -Super + C : Update clipboard') - - export SKIP_EDIT_DB_TEXT_INFO="1" -fi +Super + C : Update clipboard]} case "${PW_VULKAN_USE}" in 0) @@ -3932,9 +4015,9 @@ fi fi "${pw_yad}" --plug=$KEY_EDIT_DB_GUI --tabnum="2" --form --separator="%" --columns=1 \ - --field="$(gettext "Change the version of WINDOWS emulation")!$(gettext "Changing the WINDOWS emulation version may be required to run older games. WINDOWS versions below 10 do not support new games with DirectX 12") :CB" "${ADD_WINVER_EDIT_DB}" \ - --field="$(gettext "AUTOINSTALL WITH WINETRICKS")!$(gettext "Automatically install with WINETRICKS additional libraries required to run the game/program. List of libraries separated by spaces") :CBE" "$(combobox_fix --empty "${PW_DLL_INSTALL}" "vcrun2019 corefonts lucida")" \ - --field="$(gettext "Forced to use/disable libraries")!$(gettext "Forced to use/disable the library only for the given application. (There are examples in the drop-down list) + --field="${translations[Change the version of WINDOWS emulation]}!${translations[Changing the WINDOWS emulation version may be required to run older games. WINDOWS versions below 10 do not support new games with DirectX 12]} :CB" "${ADD_WINVER_EDIT_DB}" \ + --field="${translations[AUTOINSTALL WITH WINETRICKS]}!${translations[Automatically install with WINETRICKS additional libraries required to run the game/program. List of libraries separated by spaces]} :CBE" "$(combobox_fix --empty "${PW_DLL_INSTALL}" "vcrun2019 corefonts lucida")" \ + --field="${translations[Forced to use/disable libraries]}!${translations[Forced to use/disable the library only for the given application. (There are examples in the drop-down list) A brief instruction: * libraries are written WITHOUT the .dll file extension @@ -3943,27 +4026,27 @@ A brief instruction: * library=b - use WINE (built-in) library * library=n,b - use WINDOWS library and then WINE * library=b,n - use WINE library and then WINDOWS - * library= - disable the use of this library") :CBE" "$(combobox_fix --empty "${WINEDLLOVERRIDES}" "libglesv2=!d3dx9_36,d3dx9_42=n,b;mfc120=b,n")" \ + * library= - disable the use of this library]} :CBE" "$(combobox_fix --empty "${WINEDLLOVERRIDES}" "libglesv2=!d3dx9_36,d3dx9_42=n,b;mfc120=b,n")" \ --field=":LBLH" "" \ - --field="$(gettext "ADD ARGUMENTS FOR .EXE FILE")!$(gettext "Adding an argument after the .exe file, just like you would add an argument in a shortcut on a WINDOWS system") :CBE" "$(combobox_fix --empty "\\${LAUNCH_PARAMETERS[@]}" "-dx11 -skipintro 1")" \ + --field="${translations[ADD ARGUMENTS FOR .EXE FILE]}!${translations[Adding an argument after the .exe file, just like you would add an argument in a shortcut on a WINDOWS system]} :CBE" "$(combobox_fix --empty "\\${LAUNCH_PARAMETERS[@]}" "-dx11 -skipintro 1")" \ --field=":LBLH" "" \ - --field="$(gettext "Limit the use of processor cores")!$(gettext "Limiting the number of CPU cores is useful for Unity games (It is recommended to set the value equal to 8)") :CB" "$(combobox_fix --disabled "${CPU_LIMIT_VAR}" "${GET_LOGICAL_CORE}")" \ - --field="$(gettext "Forcibly select the OpenGL version for the game")!$(gettext "You can select the required OpenGL version, some games require a forced Compatibility Profile (COMPAT). (Examples are in the drop-down list)") :CB" "$(combobox_fix --disabled "${PW_MESA_GL_VERSION_OVERRIDE}" "4.6COMPAT!4.6!4.5COMPAT!4.5!3.3COMPAT!3.3")" \ - --field="$(gettext "Forcibly select the VKD3D feature level")!$(gettext "You can set a forced feature level VKD3D for games on DirectX12") :${VKD3D_CB}" "$(combobox_fix --disabled "${PW_VKD3D_FEATURE_LEVEL}" "12_2!12_1!12_0!11_1!11_0")" \ - --field="$(gettext "Force certain locale for an app:")!$(gettext "Fixes encoding issues in legacy software") :CB" "$(combobox_fix --disabled "${PW_LOCALE_SELECT}" "$LOCALE_LIST")" \ - 1> "${PW_TMPFS_PATH}/tmp_output_yad_fps_limit" 2>/dev/null & + --field="${translations[Limit the use of processor cores]}!${translations[Limiting the number of CPU cores is useful for Unity games (It is recommended to set the value equal to 8)]} :CB" "$(combobox_fix --disabled "${CPU_LIMIT_VAR}" "${GET_LOGICAL_CORE}")" \ + --field="${translations[Forcibly select the OpenGL version for the game]}!${translations[You can select the required OpenGL version, some games require a forced Compatibility Profile (COMPAT). (Examples are in the drop-down list)]} :CB" "$(combobox_fix --disabled "${PW_MESA_GL_VERSION_OVERRIDE}" "4.6COMPAT!4.6!4.5COMPAT!4.5!3.3COMPAT!3.3")" \ + --field="${translations[Forcibly select the VKD3D feature level]}!${translations[You can set a forced feature level VKD3D for games on DirectX12]} :${VKD3D_CB}" "$(combobox_fix --disabled "${PW_VKD3D_FEATURE_LEVEL}" "12_2!12_1!12_0!11_1!11_0")" \ + --field="${translations[Force certain locale for an app:]}!${translations[Fixes encoding issues in legacy software]} :CB" "$(combobox_fix --disabled "${PW_LOCALE_SELECT}" "$LOCALE_LIST")" \ + 1> "$PW_TMPFS_PATH/tmp_output_yad_fps_limit" 2>/dev/null & - "${pw_yad}" --notebook --key="$KEY_EDIT_DB_GUI" --title "$(gettext "EDIT DB")" --text-align=center \ - --text "$(gettext "Change settings in database file for") ${PORTWINE_DB}\n $(gettext "NOTE: To display help for each item, simply hover your mouse over the text")" \ + "${pw_yad}" --notebook --key="$KEY_EDIT_DB_GUI" --title "${translations[EDIT DB]}" --text-align=center \ + --text "${translations[Change settings in database file for]} ${PORTWINE_DB}\n ${translations[NOTE: To display help for each item, simply hover your mouse over the text]}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --separator=" " --expand \ --gui-type="settings-base" \ --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" \ - --tab="$(gettext "MAIN")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "ADVANCED")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --button="$(gettext "CANCEL THE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Cancel the current changes and return to the previous menu")":1 \ - --button="$(gettext "RESET SETTINGS")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Restore default settings")":2 \ - --button="$(gettext "OPEN THE SETTINGS FILE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Open the .ppdb settings file in a system text editor to view and change variables manually")":150 \ - --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":0 2>/dev/null + --tab="${translations[MAIN]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[ADVANCED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET SETTINGS]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings]}":2 \ + --button="${translations[OPEN THE SETTINGS FILE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open the .ppdb settings file in a system text editor to view and change variables manually]}":150 \ + --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":0 2>/dev/null YAD_STATUS="$?" case "$YAD_STATUS" in @@ -4035,65 +4118,61 @@ gui_vkbasalt () { LIST_FX=($(grep -E '.fx$|.fxh$' "${FILE_VKBASALT_CONF}" | awk '{print $1}')) GET_FX_IN_FILE=($(echo ${PW_VKBASALT_EFFECTS} | sed s/"cas:"// | sed s/":"/" "/g)) -if [[ "${SKIP_VKBASALT_TEXT_INFO}" != "1" ]] ; then - export PW_3DFX_INFO=$(gettext 'Simulation of an old 3dfx graphics accelerator (adds horizontal stripes)') - export PW_AdaptiveSharpen_INFO=$(gettext 'Sharpness increase, can be used with CAS') - export PW_Bloom_INFO=$(gettext 'Adds glow from bright light sources in the game') - export PW_Border_INFO=$(gettext 'Cropping the image from the top and bottom (like in a movie =)') - export PW_Cartoon_INFO=$(gettext 'Strong sharpening of texture edges') - export PW_ChromaticAberration_INFO=$(gettext 'Adds chromatic aberration to an image') - export PW_Clarity_INFO=$(gettext 'Sharpening textures with slight modifications of image contrast (similar in effect to CAS)') - export PW_ColorMatrix_INFO=$(gettext 'Adding cool colors') - export PW_Colourfulness_INFO=$(gettext 'Increasing color saturation') - export PW_FakeHDR_INFO=$(gettext 'Add fake HDR') - export PW_FilmGrain2_INFO=$(gettext 'Adding the film grain effect') - export PW_Curves_INFO=$(gettext 'Increases the contrast of the image without affecting the bright and dark areas, so that the detail in shadows and sky is not lost') - export PW_Denoise_INFO=$(gettext 'Reducing noise by blurring the image') - export PW_Emphasize_INFO=$(gettext 'Reducing the bit depth of color') - export PW_FakeMotionBlur_INFO=$(gettext 'Strong blurring of objects in motion') - export PW_FilmicAnamorphSharpen_INFO=$(gettext 'Sharpening (recommended for cartoon games)') - export PW_FilmicPass_INFO=$(gettext 'Adding cold colors') - export PW_SMAA_INFO=$(gettext 'Alternative antialiasing option (less effect, but with less consumption of GPU resources, relative to the standard SMAA)') - export PW_GaussianBlur_INFO=$(gettext 'Slight blur effect on bright objects (such as flames)') - export PW_Glitch_INFO=$(gettext 'Glitch effect') - export PW_HighPassSharpen_INFO=$(gettext 'Another method of sharpening using highpass frequencies') - export PW_HQ4X_INFO=$(gettext 'Smoothing of nearby pixels with the drawing of missing parts (in normal games the picture is blurred)') - export PW_HSLShift_INFO=$(gettext 'Advanced HSL shift (for each shade)') - export PW_Layer_INFO=$(gettext "Image overlay on the game") - export PW_Levels_INFO=$(gettext 'Increases contrast, but some detail in shadows or highlights may be lost') - export PW_LevelsPlus_INFO=$(gettext 'Same as Levels, but with less loss of detail') - export PW_LiftGammaGain_INFO=$(gettext 'Gamma correction by individual color channels: red, green and blue') - export PW_LightDoF_INFO=$(gettext 'Increases depth of field (greatly affects FPS)') - export PW_LumaSharpen_INFO=$(gettext 'Enhances image sharpness for improved detail') - export PW_LUT_INFO=$(gettext 'Image color correction') - export PW_MagicBloom_INFO=$(gettext 'Same as Bloom, but more natural') - export PW_Monochrome_INFO=$(gettext 'Converts the image into monochrome') - export PW_MultiLUT_INFO=$(gettext 'Extended version of the LUT (Hollywood loot is pre-installed)') - export PW_MXAO_INFO=$(gettext 'SSAO algorithm (Greatly affects FPS)') - export PW_NightVision_INFO=$(gettext 'Night vision effect') - export PW_Nostalgia_INFO=$(gettext 'Makes the picture look like old photos') - export PW_PerfectPerspective_INFO=$(gettext 'Fisheye effect (suitable for VR)') - export PW_PPFX_Godrays_INFO=$(gettext 'Add God rays (also called 3D light rays) effect') - export PW_Prism_INFO=$(gettext 'The prismatic lens effect') - export PW_ReflectiveBumpMapping_INFO=$(gettext 'Creates the illusion of depth in textures') - export PW_Sepia_INFO=$(gettext 'Adds a sepia effect like in old photos') - export PW_Splitscreen_INFO=$(gettext 'Splits the image into raw and processed output for comparison') - export PW_SurfaceBlur_INFO=$(gettext 'Reducing object detail without blurring contrast contours') - export PW_Technicolor_INFO=$(gettext 'Makes the picture look like films from the 1930s') - export PW_Technicolor2_INFO=$(gettext 'The updated version of Technicolor, gives a different picture by changing colors more aggressively') - export PW_TiltShift_INFO=$(gettext 'Blur on the edges of the screen to create a Tilt Shift effect') - export PW_Tonemap_INFO=$(gettext 'Changes the saturation of the picture') - export PW_TriDither_INFO=$(gettext 'Reduces the amount of noise') - export PW_UIDetect_INFO=$(gettext 'Automatically switches effects depending on the visibility of the UI') - export PW_Vibrance_INFO=$(gettext 'Saturates faded colors without touching the bright ones') - export PW_Vignette_INFO=$(gettext 'Adds a vignette to the image') - export PW_AspectRatio_INFO=$(gettext 'An effect for adjusting the aspect ratio (for games that do not support widescreen monitors)') - export PW_UIMask_INFO=$(gettext 'Part of the overall ReShade shader . It uses a mask with gradients from black to white to determine where the effects will be applied') - export PW_StageDepth_INFO=$(gettext 'Allows you to add new elements to the 3d space inside the game and apply custom textures') - export PW_PPFX_Bloom_INFO=$(gettext 'Adds a Bloom effect') - - export SKIP_VKBASALT_TEXT_INFO="1" -fi + PW_3DFX_INFO=${translations[Simulation of an old 3dfx graphics accelerator (adds horizontal stripes)]} + PW_AdaptiveSharpen_INFO=${translations[Sharpness increase, can be used with CAS]} + PW_Bloom_INFO=${translations[Adds glow from bright light sources in the game]} + PW_Border_INFO=${translations[Cropping the image from the top and bottom (like in a movie =)]} + PW_Cartoon_INFO=${translations[Strong sharpening of texture edges]} + PW_ChromaticAberration_INFO=${translations[Adds chromatic aberration to an image]} + PW_Clarity_INFO=${translations[Sharpening textures with slight modifications of image contrast (similar in effect to CAS)]} + PW_ColorMatrix_INFO=${translations[Adding cool colors]} + PW_Colourfulness_INFO=${translations[Increasing color saturation]} + PW_FakeHDR_INFO=${translations[Add fake HDR]} + PW_FilmGrain2_INFO=${translations[Adding the film grain effect]} + PW_Curves_INFO=${translations[Increases the contrast of the image without affecting the bright and dark areas, so that the detail in shadows and sky is not lost]} + PW_Denoise_INFO=${translations[Reducing noise by blurring the image]} + PW_Emphasize_INFO=${translations[Reducing the bit depth of color]} + PW_FakeMotionBlur_INFO=${translations[Strong blurring of objects in motion]} + PW_FilmicAnamorphSharpen_INFO=${translations[Sharpening (recommended for cartoon games)]} + PW_FilmicPass_INFO=${translations[Adding cold colors]} + PW_SMAA_INFO=${translations[Alternative antialiasing option (less effect, but with less consumption of GPU resources, relative to the standard SMAA)]} + PW_GaussianBlur_INFO=${translations[Slight blur effect on bright objects (such as flames)]} + PW_Glitch_INFO=${translations[Glitch effect]} + PW_HighPassSharpen_INFO=${translations[Another method of sharpening using highpass frequencies]} + PW_HQ4X_INFO=${translations[Smoothing of nearby pixels with the drawing of missing parts (in normal games the picture is blurred)]} + PW_HSLShift_INFO=${translations[Advanced HSL shift (for each shade)]} + PW_Layer_INFO=${translations[Image overlay on the game]} + PW_Levels_INFO=${translations[Increases contrast, but some detail in shadows or highlights may be lost]} + PW_LevelsPlus_INFO=${translations[Same as Levels, but with less loss of detail]} + PW_LiftGammaGain_INFO=${translations[Gamma correction by individual color channels: red, green and blue]} + PW_LightDoF_INFO=${translations[Increases depth of field (greatly affects FPS)]} + PW_LumaSharpen_INFO=${translations[Enhances image sharpness for improved detail]} + PW_LUT_INFO=${translations[Image color correction]} + PW_MagicBloom_INFO=${translations[Same as Bloom, but more natural]} + PW_Monochrome_INFO=${translations[Converts the image into monochrome]} + PW_MultiLUT_INFO=${translations[Extended version of the LUT (Hollywood loot is pre-installed)]} + PW_MXAO_INFO=${translations[SSAO algorithm (Greatly affects FPS)]} + PW_NightVision_INFO=${translations[Night vision effect]} + PW_Nostalgia_INFO=${translations[Makes the picture look like old photos]} + PW_PerfectPerspective_INFO=${translations[Fisheye effect (suitable for VR)]} + PW_PPFX_Godrays_INFO=${translations[Add God rays (also called 3D light rays) effect]} + PW_Prism_INFO=${translations[The prismatic lens effect]} + PW_ReflectiveBumpMapping_INFO=${translations[Creates the illusion of depth in textures]} + PW_Sepia_INFO=${translations[Adds a sepia effect like in old photos]} + PW_Splitscreen_INFO=${translations[Splits the image into raw and processed output for comparison]} + PW_SurfaceBlur_INFO=${translations[Reducing object detail without blurring contrast contours]} + PW_Technicolor_INFO=${translations[Makes the picture look like films from the 1930s]} + PW_Technicolor2_INFO=${translations[The updated version of Technicolor, gives a different picture by changing colors more aggressively]} + PW_TiltShift_INFO=${translations[Blur on the edges of the screen to create a Tilt Shift effect]} + PW_Tonemap_INFO=${translations[Changes the saturation of the picture]} + PW_TriDither_INFO=${translations[Reduces the amount of noise]} + PW_UIDetect_INFO=${translations[Automatically switches effects depending on the visibility of the UI]} + PW_Vibrance_INFO=${translations[Saturates faded colors without touching the bright ones]} + PW_Vignette_INFO=${translations[Adds a vignette to the image]} + PW_AspectRatio_INFO=${translations[An effect for adjusting the aspect ratio (for games that do not support widescreen monitors)]} + PW_UIMask_INFO=${translations[Part of the overall ReShade shader . It uses a mask with gradients from black to white to determine where the effects will be applied]} + PW_StageDepth_INFO=${translations[Allows you to add new elements to the 3d space inside the game and apply custom textures]} + PW_PPFX_Bloom_INFO=${translations[Adds a Bloom effect]} unset ADD_GUI_FX GUI_FX_RESULT for add_list_fx in ${LIST_FX[@]} ; do @@ -4119,23 +4198,23 @@ fi fi IFS="%" "${pw_yad}" --plug=$KEY_FX_GUI --tabnum="1" --form --columns=4 --separator=" " \ - --text-align=center --text="$(gettext "VkBasalt settings for adding effects to games running under Vulkan. (The HOME key disables vkbasalt)\nNOTE: To display help for each item, simply hover over the text")" \ + --text-align=center --text="${translations[VkBasalt settings for adding effects to games running under Vulkan. (The HOME key disables vkbasalt)\\nNOTE: To display help for each item, simply hover over the text]}" \ --gui-type-text="${PANED_GUI_TYPE_TEXT_UP}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_UP}" \ ${ADD_GUI_FX} 1> "${PW_TMPFS_PATH}/tmp_yad_basalt_set" 2>/dev/null & IFS="$orig_IFS" "${pw_yad}" --plug=$KEY_FX_GUI --tabnum="2" --separator=" " --form \ --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \ - --field="AMD FidelityFX - Contrast Adaptive Sharpening"!"$(gettext "AMD FidelityFX - CAS is designed to dramatically improve texture sharpness without additional modification settings for games, with minimal loss of performance. (For older games it is recommended to set value = 100)")":SCL "${VKBASALT_FFX_CAS_GUI}" \ + --field="AMD FidelityFX - Contrast Adaptive Sharpening"!"${translations[AMD FidelityFX - CAS is designed to dramatically improve texture sharpness without additional modification settings for games, with minimal loss of performance. (For older games it is recommended to set value = 100)]}":SCL "${VKBASALT_FFX_CAS_GUI}" \ 1> "${PW_TMPFS_PATH}/tmp_yad_cas_set" 2>/dev/null & "${pw_yad}" --paned --key="$KEY_FX_GUI" --sensitive --title="vkBasalt" \ --gui-type="settings-paned" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="$(gettext "CANCEL THE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Cancel the current changes and return to the previous menu")":1 \ - --button="$(gettext "RESET") VKBASALT"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Restore default settings for") vkBasalt":178 \ - --button="$(gettext "DISABLE") VKBASALT"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Disable vkBasalt and go to the previous menu")":180 \ - --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":182 2>/dev/null + --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} VKBASALT"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} vkBasalt":178 \ + --button="${translations[DISABLE]} VKBASALT"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable vkBasalt and go to the previous menu]}":180 \ + --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":182 2>/dev/null YAD_VKBASALT_STATUS="$?" case "${YAD_VKBASALT_STATUS}" in @@ -4194,64 +4273,60 @@ gui_mangohud () { time version vkbasalt vram vulkan_driver wine ) -if [[ "${SKIP_MANGOHUD_TEXT_INFO}" != "1" ]] ; then - export PW_MH_arch_INFO=$(gettext 'Show if the application is 32- or 64-bit') - export PW_MH_battery_INFO=$(gettext 'Display current battery percent and energy consumption') - export PW_MH_battery_icon_INFO=$(gettext 'Display battery icon instead of percent') - export PW_MH_battery_time_INFO=$(gettext 'Display remaining time for battery option') - export PW_MH_battery_watt_INFO=$(gettext 'Display wattage for the battery option') - export PW_MH_core_bars_INFO=$(gettext 'Change the display of core_load from numbers to vertical bars') - export PW_MH_core_load_INFO=$(gettext 'Display load & frequency per core') - export PW_MH_cpu_mhz_INFO=$(gettext 'Show the CPUs current MHz') - export PW_MH_cpu_power_INFO=$(gettext 'Display CPU draw in watts') - export PW_MH_cpu_temp_INFO=$(gettext 'Display current CPU temperature') - export PW_MH_device_battery_icon_INFO=$(gettext 'Display wirless device battery icon.') - export PW_MH_engine_short_names_INFO=$(gettext 'Display a short version of the used engine (e.g. OGL instead of OpenGL)') - export PW_MH_engine_version_INFO=$(gettext 'Display OpenGL or vulkan and vulkan-based render engines version') - export PW_MH_exec_name_INFO=$(gettext 'Display current exec name') - export PW_MH_fcat_INFO=$(gettext 'Enables frame capture analysis') - export PW_MH_fps_metrics_INFO=$(gettext 'Takes a list of decimal values or the value avg, e.g avg,0.001') - export PW_MH_frame_count_INFO=$(gettext 'Display frame count') - export PW_MH_full_INFO=$(gettext 'Enable most of the toggleable parameters (currently excludes histogram)') - export PW_MH_gamemode_INFO=$(gettext 'Show if GameMode is on') - export PW_MH_gpu_core_clock_INFO=$(gettext 'Display GPU core frequency') - export PW_MH_gpu_fan_INFO=$(gettext 'GPU fan in rpm on AMD, FAN in percent on NVIDIA') - export PW_MH_gpu_junction_temp_INFO=$(gettext 'Display current GPU temperature') - export PW_MH_gpu_mem_clock_INFO=$(gettext 'Display GPU memory frequency') - export PW_MH_gpu_mem_temp_INFO=$(gettext 'Display current GPU temperature') - export PW_MH_gpu_name_INFO=$(gettext 'Display GPU name from pci.ids') - export PW_MH_gpu_power_INFO=$(gettext 'Display GPU draw in watts') - export PW_MH_gpu_temp_INFO=$(gettext 'Display current GPU temperature') - export PW_MH_gpu_voltage_INFO=$(gettext 'Display GPU voltage (only works on AMD GPUs)') - export PW_MH_histogram_INFO=$(gettext 'Change FPS graph to histogram') - export PW_MH_horizontal_INFO=$(gettext 'Display Mangohud in a horizontal position') - export PW_MH_horizontal_stretch_INFO=$(gettext 'Stretches the background to the screens width in horizontal mode') - export PW_MH_hud_compact_INFO=$(gettext 'Display compact version of MangoHud') - export PW_MH_hud_no_margin_INFO=$(gettext 'Remove margins around MangoHud') - export PW_MH_io_read_INFO=$(gettext 'Show non-cached IO read, in MiB/s') - export PW_MH_io_write_INFO=$(gettext 'Show non-cached IO write, in MiB/s') - export PW_MH_no_display_INFO=$(gettext 'Hide the HUD by default') - export PW_MH_no_small_font_INFO=$(gettext 'Use primary font size for smaller text like units') - export PW_MH_procmem_INFO=$(gettext 'Displays process memory usage: resident procmem (resident) also toggles others off if disabled') - export PW_MH_procmem_shared_INFO=$(gettext 'Displays process memory usage: shared') - export PW_MH_procmem_virt_INFO=$(gettext 'Displays process memory usage: virtual') - export PW_MH_ram_INFO=$(gettext 'Display system RAM usage') - export PW_MH_resolution_INFO=$(gettext 'Display the current resolution') - export PW_MH_show_fps_limit_INFO=$(gettext 'Display the current FPS limit') - export PW_MH_swap_INFO=$(gettext 'Display swap space usage next to system RAM usage') - export PW_MH_temp_fahrenheit_INFO=$(gettext 'Show temperature in Fahrenheit') - export PW_MH_throttling_status_INFO=$(gettext 'Show if GPU is throttling based on Power, current, temp or "other" (Only shows if throttling is currently happening). Currently disabled by default for Nvidia as it causes lag on 3000 series') - export PW_MH_throttling_status_graph_INFO=$(gettext 'Same as throttling_status but displays throttling in the frametime graph and only power and temp throttling') - export PW_MH_time_INFO=$(gettext 'Display time') - export PW_MH_version_INFO=$(gettext 'Show current MangoHud version') - export PW_MH_vkbasalt_INFO=$(gettext 'Show if vkBasalt is on') - export PW_MH_vram_INFO=$(gettext 'Display system VRAM usage') - export PW_MH_vulkan_driver_INFO=$(gettext 'Display used Vulkan driver (radv/amdgpu-pro/amdvlk)') - export PW_MH_frametime_INFO=$(gettext 'Display frametime next to FPS text') - export PW_MH_wine_INFO=$(gettext 'Show current Wine or Proton version in use') - - export SKIP_MANGOHUD_TEXT_INFO="1" -fi + PW_MH_arch_INFO=${translations[Show if the application is 32- or 64-bit]} + PW_MH_battery_INFO=${translations[Display current battery percent and energy consumption]} + PW_MH_battery_icon_INFO=${translations[Display battery icon instead of percent]} + PW_MH_battery_time_INFO=${translations[Display remaining time for battery option]} + PW_MH_battery_watt_INFO=${translations[Display wattage for the battery option]} + PW_MH_core_bars_INFO=${translations[Change the display of core_load from numbers to vertical bars]} + PW_MH_core_load_INFO=${translations[Display load & frequency per core]} + PW_MH_cpu_mhz_INFO=${translations[Show the CPUs current MHz]} + PW_MH_cpu_power_INFO=${translations[Display CPU draw in watts]} + PW_MH_cpu_temp_INFO=${translations[Display current CPU temperature]} + PW_MH_device_battery_icon_INFO=${translations[Display wirless device battery icon.]} + PW_MH_engine_short_names_INFO=${translations[Display a short version of the used engine (e.g. OGL instead of OpenGL)]} + PW_MH_engine_version_INFO=${translations[Display OpenGL or vulkan and vulkan-based render engines version]} + PW_MH_exec_name_INFO=${translations[Display current exec name]} + PW_MH_fcat_INFO=${translations[Enables frame capture analysis]} + PW_MH_fps_metrics_INFO=${translations[Takes a list of decimal values or the value avg, e.g avg,0.001]} + PW_MH_frame_count_INFO=${translations[Display frame count]} + PW_MH_full_INFO=${translations[Enable most of the toggleable parameters (currently excludes histogram)]} + PW_MH_gamemode_INFO=${translations[Show if GameMode is on]} + PW_MH_gpu_core_clock_INFO=${translations[Display GPU core frequency]} + PW_MH_gpu_fan_INFO=${translations[GPU fan in rpm on AMD, FAN in percent on NVIDIA]} + PW_MH_gpu_junction_temp_INFO=${translations[Display current GPU temperature]} + PW_MH_gpu_mem_clock_INFO=${translations[Display GPU memory frequency]} + PW_MH_gpu_mem_temp_INFO=${translations[Display current GPU temperature]} + PW_MH_gpu_name_INFO=${translations[Display GPU name from pci.ids]} + PW_MH_gpu_power_INFO=${translations[Display GPU draw in watts]} + PW_MH_gpu_temp_INFO=${translations[Display current GPU temperature]} + PW_MH_gpu_voltage_INFO=${translations[Display GPU voltage (only works on AMD GPUs)]} + PW_MH_histogram_INFO=${translations[Change FPS graph to histogram]} + PW_MH_horizontal_INFO=${translations[Display Mangohud in a horizontal position]} + PW_MH_horizontal_stretch_INFO=${translations[Stretches the background to the screens width in horizontal mode]} + PW_MH_hud_compact_INFO=${translations[Display compact version of MangoHud]} + PW_MH_hud_no_margin_INFO=${translations[Remove margins around MangoHud]} + PW_MH_io_read_INFO=${translations[Show non-cached IO read, in MiB/s]} + PW_MH_io_write_INFO=${translations[Show non-cached IO write, in MiB/s]} + PW_MH_no_display_INFO=${translations[Hide the HUD by default]} + PW_MH_no_small_font_INFO=${translations[Use primary font size for smaller text like units]} + PW_MH_procmem_INFO=${translations[Displays process memory usage: resident procmem (resident) also toggles others off if disabled]} + PW_MH_procmem_shared_INFO=${translations[Displays process memory usage: shared]} + PW_MH_procmem_virt_INFO=${translations[Displays process memory usage: virtual]} + PW_MH_ram_INFO=${translations[Display system RAM usage]} + PW_MH_resolution_INFO=${translations[Display the current resolution]} + PW_MH_show_fps_limit_INFO=${translations[Display the current FPS limit]} + PW_MH_swap_INFO=${translations[Display swap space usage next to system RAM usage]} + PW_MH_temp_fahrenheit_INFO=${translations[Show temperature in Fahrenheit]} + PW_MH_throttling_status_INFO=${translations[Show if GPU is throttling based on Power, current, temp or "other" (Only shows if throttling is currently happening). Currently disabled by default for Nvidia as it causes lag on 3000 series]} + PW_MH_throttling_status_graph_INFO=${translations[Same as throttling_status but displays throttling in the frametime graph and only power and temp throttling]} + PW_MH_time_INFO=${translations[Display time]} + PW_MH_version_INFO=${translations[Show current MangoHud version]} + PW_MH_vkbasalt_INFO=${translations[Show if vkBasalt is on]} + PW_MH_vram_INFO=${translations[Display system VRAM usage]} + PW_MH_vulkan_driver_INFO=${translations[Display used Vulkan driver (radv/amdgpu-pro/amdvlk)]} + PW_MH_frametime_INFO=${translations[Display frametime next to FPS text]} + PW_MH_wine_INFO=${translations[Show current Wine or Proton version in use]} unset ADD_GUI_MH GUI_MH_RESULT ADD_GUI_MH_FPS GUI_MH_FPS_RESULT PW_FPS_LIMIT_VAR PW_MANGOHUD_CONFIG try_remove_file "${PW_TMPFS_PATH}/tmp_yad_mh_set" @@ -4288,11 +4363,11 @@ fi IFS="%" "${pw_yad}" --plug=$KEY_MH_GUI --tabnum="1" --form --columns=5 --separator=" " --text-align=center \ - --text="$(gettext "MangoHud settings (Keys R_SHIFT + F12 disable MangoHud)\nnote: To display help for each item, just hover the mouse cursor over the text.")" \ + --text="${translations[MangoHud settings (Keys R_SHIFT + F12 disable MangoHud)\\nnote: To display help for each item, just hover the mouse cursor over the text.]}" \ --gui-type-text="${PANED_GUI_TYPE_TEXT_UP}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_UP}" \ ${ADD_GUI_MH} 1> "${PW_TMPFS_PATH}/tmp_yad_mh_set" 2>/dev/null & "${pw_yad}" --plug=$KEY_MH_GUI --tabnum="2" --form --columns=10 --separator=" " --text-align=center \ - --text="$(gettext "Enabling fps limitation with MANGOHUD tools built into PortProton (Keys L_SHIFT + F1 Toggles fps limitation)")" \ + --text="${translations[Enabling fps limitation with MANGOHUD tools built into PortProton (Keys L_SHIFT + F1 Toggles fps limitation)]}" \ --gui-type-text="${PANED_GUI_TYPE_TEXT_DOWN}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \ ${ADD_GUI_MH_FPS} 1> "${PW_TMPFS_PATH}/tmp_yad_mh_fps_limit" 2>/dev/null & IFS="$orig_IFS" @@ -4300,11 +4375,11 @@ fi "${pw_yad}" --paned --key="$KEY_MH_GUI" --title="MangoHud" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --sensitive \ --gui-type="settings-paned" \ - --button="$(gettext "CANCEL THE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Cancel the current changes and return to the previous menu")":1 \ - --button="$(gettext "RESET") MANGOHUD"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Restore default settings for") MangoHud":180 \ - --button="$(gettext "PREVIEW CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Start vkcube for preview changes")":184 \ - --button="$(gettext "DISABLE") MANGOHUD"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Disable MangoHud and go to the previous menu")":182 \ - --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":186 2>/dev/null + --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} MANGOHUD"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} MangoHud":180 \ + --button="${translations[PREVIEW CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Start vkcube for preview changes]}":184 \ + --button="${translations[DISABLE]} MANGOHUD"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable MangoHud and go to the previous menu]}":182 \ + --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":186 2>/dev/null YAD_MANGOHUD_STATUS="$?" case "${YAD_MANGOHUD_STATUS}" in @@ -4402,29 +4477,25 @@ gui_dgvoodoo2 () { PW_DGV2_INACTIVE_APP_STATE " -if [[ "${SKIP_DGVOODOO2_TEXT_INFO}" != "1" ]] ; then - export PW_DGV2_USE_DX12_INFO=$(gettext 'Use DirectX12 for dgVoodoo2. Doesnt always work better. (Working only on newest and stable dxvk/vkd3d) (Direct3D and Glide settings)') - export PW_DGV2_FORCE_VSYNC_INFO=$(gettext 'Force the vertical sync to avoid tearing or prevent the GPU from rendering at crazy high speed. Keep in mind that some application need unforced vSync because of synchronization reasons. (Direct3D settings)') - export PW_DGV2_DGVOODOO_WATERMARK_INFO=$(gettext 'Shows the dgVoodoo watermark in-game when enabled. (Direct3D settings)') - export PW_DGV2_ENABLE_CRT_INFO=$(gettext 'CRT-like blurred appearance. (Direct3D and Glide settings)') - export PW_DGV2_DISABLE_MIPMAPPING_INFO=$(gettext 'Disabling mipmapping can be used to make textured surfaces sharper. (Direct3D and Glide settings)') - export PW_DGV2_FREE_MOUSE_INFO=$(gettext 'If enabled then physical mouse is free to move inside the game window when using emulated scaling and/or application and forced resolution differs. Can be useful when a game relies and the physical window size. (Direct3D and Glide settings)') - export PW_DGV2_DISABLE_D3D_INFO=$(gettext 'Do not use d3d8 and d3d9 dgVoodoo2 libraries. For some old games, using the example of Space Rangers, a bug with a black screen is corrected. (Direct3D settings)') - export PW_DGV2_FILTER_POINT_SAMPLED_INFO=$(gettext 'if enabled then forced filtering affects only non-point sampled textures. (Direct3D settings)') - export PW_DGV2_FASTMEMORY_INFO=$(gettext 'Enable fast memory access. (Enable if games have poor performance, using Unreal 2 as an example) (Direct3D settings)') - export PW_DGV2_PHONG_SHADING_INFO=$(gettext 'If this option is enabled then Phong shading is applied in place of Gouraud when it is possible. It works only when an application uses the fixed function vertex/pixel pipline and pushes all the work of the vertex transforming and lighting to Direct3D when rendering primitives. Keep in mind that it requires much more GPU power than default shading. (Direct3D settings)') - export PW_DGV2_BLIT_STRETCH_INFO=$(gettext 'If this options enabled then linear filtering is applied for stretched copying between 2D surfaces (DirectDraw only). Early hardware did not support or apply point sampled blitting which can end up very pixelated results. Linear filtering is much nicer in general but can cause artifacts especially with colorkeyed blitting. (Direct3D settings)') - export PW_DGV2_GLIDE_NAPALM_INFO=$(gettext 'Use 3dfx glide napalm, uses antialiasing provided by the application. (Disables antialiasing setting) (Glide settings)') - export PW_DGV2_GLIDE_GAMMA_RAMP_INFO=$(gettext 'Enable gamma ramp coming for Glide. (Glide settings)') - export PW_DGV2_ONBOARD_RAM_INFO=$(gettext 'Increases memory for videocard Voodoo Graphics, Voodoo Rush, Voodoo 2, Voodoo Banshee. You can set the game resolution higher. (Glide settings)') - export PW_DGV2_EMULATING_PCI_ACCESS_INFO=$(gettext 'When enabled, the virtual 3Dfx card will have PCI bus speeds emulated as closely as possible. Emulation of true PCI access should theoretically never be disabled but there can be possible degradation of performance when left enabled. Only some games require accurate emulation of the PCI bus, so in most cases PCI bus emulation should be left disabled. (Glide settings)') - export PW_DGV2_16_BIT_DEPTH_BUFFER_INFO=$(gettext 'Enabling 16-bit depth buffers can prevent Z-fighting in games, but also has the disadvantage of possibly causing artifacting. (Glide settings)') - export PW_DGV2_3DFX_WATERMARK_INFO=$(gettext 'Shows the 3Dfx watermark in-game when enabled. (Glide settings)') - export PW_DGV2_3DFX_SPLASH_SCREEN_INFO=$(gettext 'The 3Dfx splash screen is seen when an application starts, disabling this option prevents this animation from playing. (Glide settings)') - export PW_DGV2_INACTIVE_APP_STATE_INFO=$(gettext 'Enabling inactive state prevents the application from detecting losing the application focus. Most of the Glide applications close or deactivate themself when losing focus, so this can be used to let the application run in the background. (Glide settings)') - - export SKIP_DGVOODOO2_TEXT_INFO="1" -fi + PW_DGV2_USE_DX12_INFO=${translations[Use DirectX12 for dgVoodoo2. Doesnt always work better. (Working only on newest and stable dxvk/vkd3d) (Direct3D and Glide settings)]} + PW_DGV2_FORCE_VSYNC_INFO=${translations[Force the vertical sync to avoid tearing or prevent the GPU from rendering at crazy high speed. Keep in mind that some application need unforced vSync because of synchronization reasons. (Direct3D settings)]} + PW_DGV2_DGVOODOO_WATERMARK_INFO=${translations[Shows the dgVoodoo watermark in-game when enabled. (Direct3D settings)]} + PW_DGV2_ENABLE_CRT_INFO=${translations[CRT-like blurred appearance. (Direct3D and Glide settings)]} + PW_DGV2_DISABLE_MIPMAPPING_INFO=${translations[Disabling mipmapping can be used to make textured surfaces sharper. (Direct3D and Glide settings)]} + PW_DGV2_FREE_MOUSE_INFO=${translations[If enabled then physical mouse is free to move inside the game window when using emulated scaling and/or application and forced resolution differs. Can be useful when a game relies and the physical window size. (Direct3D and Glide settings)]} + PW_DGV2_DISABLE_D3D_INFO=${translations[Do not use d3d8 and d3d9 dgVoodoo2 libraries. For some old games, using the example of Space Rangers, a bug with a black screen is corrected. (Direct3D settings)]} + PW_DGV2_FILTER_POINT_SAMPLED_INFO=${translations[if enabled then forced filtering affects only non-point sampled textures. (Direct3D settings)]} + PW_DGV2_FASTMEMORY_INFO=${translations[Enable fast memory access. (Enable if games have poor performance, using Unreal 2 as an example) (Direct3D settings)]} + PW_DGV2_PHONG_SHADING_INFO=${translations[If this option is enabled then Phong shading is applied in place of Gouraud when it is possible. It works only when an application uses the fixed function vertex/pixel pipline and pushes all the work of the vertex transforming and lighting to Direct3D when rendering primitives. Keep in mind that it requires much more GPU power than default shading. (Direct3D settings)]} + PW_DGV2_BLIT_STRETCH_INFO=${translations[If this options enabled then linear filtering is applied for stretched copying between 2D surfaces (DirectDraw only). Early hardware did not support or apply point sampled blitting which can end up very pixelated results. Linear filtering is much nicer in general but can cause artifacts especially with colorkeyed blitting. (Direct3D settings)]} + PW_DGV2_GLIDE_NAPALM_INFO=${translations[Use 3dfx glide napalm, uses antialiasing provided by the application. (Disables antialiasing setting) (Glide settings)]} + PW_DGV2_GLIDE_GAMMA_RAMP_INFO=${translations[Enable gamma ramp coming for Glide. (Glide settings)]} + PW_DGV2_ONBOARD_RAM_INFO=${translations[Increases memory for videocard Voodoo Graphics, Voodoo Rush, Voodoo 2, Voodoo Banshee. You can set the game resolution higher. (Glide settings)]} + PW_DGV2_EMULATING_PCI_ACCESS_INFO=${translations[When enabled, the virtual 3Dfx card will have PCI bus speeds emulated as closely as possible. Emulation of true PCI access should theoretically never be disabled but there can be possible degradation of performance when left enabled. Only some games require accurate emulation of the PCI bus, so in most cases PCI bus emulation should be left disabled. (Glide settings)]} + PW_DGV2_16_BIT_DEPTH_BUFFER_INFO=${translations[Enabling 16-bit depth buffers can prevent Z-fighting in games, but also has the disadvantage of possibly causing artifacting. (Glide settings)]} + PW_DGV2_3DFX_WATERMARK_INFO=${translations[Shows the 3Dfx watermark in-game when enabled. (Glide settings)]} + PW_DGV2_3DFX_SPLASH_SCREEN_INFO=${translations[The 3Dfx splash screen is seen when an application starts, disabling this option prevents this animation from playing. (Glide settings)]} + PW_DGV2_INACTIVE_APP_STATE_INFO=${translations[Enabling inactive state prevents the application from detecting losing the application focus. Most of the Glide applications close or deactivate themself when losing focus, so this can be used to let the application run in the background. (Glide settings)]} # fix [[ "${PW_DGV2_FILTERING}" == "0" ]] && export PW_DGV2_FILTERING="disabled" && edit_db_from_gui PW_DGV2_FILTERING @@ -4454,7 +4525,7 @@ fi IFS="%" "${pw_yad}" --plug=$KEY_DGV2_GUI --tabnum="1" --form --separator=" " --columns=4 ${ADD_CHK_BOX_DGV2} --text-align=center \ - --text="$(gettext "dgVoodoo2 settings\nNOTE: To display help for each item, simply hover over the text")" \ + --text=${translations[dgVoodoo2 settings\\nNOTE: To display help for each item, simply hover over the text]} \ --gui-type-text="${PANED_GUI_TYPE_TEXT_UP}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_UP}" \ 1> "${PW_TMPFS_PATH}/tmp_yad_dgv2_set" 2>/dev/null & IFS="$orig_IFS" @@ -4472,40 +4543,40 @@ fi "${pw_yad}" --plug=$KEY_DGV2_GUI --tabnum="2" --form --columns=3 --separator="%" \ --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \ - --field="${CHKBOX_SPACE}RESOLUTION!$(gettext "Set the resolution used. (Direct3D and Glide settings)") :CBE" "$(combobox_fix --disabled "${PW_DGV2_RESOLUTION}" "4x app resolution!3x app resolution!2x app resolution!${DGVOODOO2_XRANDR_NEW::-1}")" \ - --field="${CHKBOX_SPACE}FPS LIMIT!$(gettext "You can configure fps limit. (Direct3D and Glide settings)") :CBE" "$(combobox_fix --disabled "${PW_DGV2_FPS_LIMIT}" "30!40!45!48!60!75!90!120!144!165!175!240")" \ - --field="${CHKBOX_SPACE}FILTERING!$(gettext "You can select from various texture filtering modes here. Forcing other than the app default can result in glitches or break some rendering effects. (Glide have max filtering bilinear) (Direct3D and Glide settings)") :CB" "$(combobox_fix --disabled "${PW_DGV2_FILTERING}" "${DGVOODOO2_FILTERING}")" \ - --field="${CHKBOX_SPACE}ANTIALIASING!$(gettext "Forcing antialiasing. This can cause artifacts. (Direct3D and Glide settings)") :CB" "$(combobox_fix --disabled "${PW_DGV2_ANTIALIASING}" "2x!4x!8x")" \ - --field="${CHKBOX_SPACE}BIT DEPTH!$(gettext "You can define what screen bit depth should be reported through dgVoodoo. (For game MOTO need 16 bit depth) (Direct3D and Glide settings)") :CB" "$(combobox_fix --disabled "${PW_DGV2_BIT_DEPTH}" "8!16!32")" \ - --field="${CHKBOX_SPACE}VIDEOCARD!$(gettext "You can select a virtual video card. (For game Quake 2 need Voodoo Graphics or Voodoo Rush card) (Direct3D and Glide settings)") :CB" "$(combobox_fix "${PW_DGV2_VIDEOCARD}" "${DGVOODOO2_VIDEOCARD}")" \ - --field="${CHKBOX_SPACE}VRAM!$(gettext "Increase the amount of vram for dgVoodoo2. (Direct3D settings) + --field="${CHKBOX_SPACE}RESOLUTION!${translations[Set the resolution used. (Direct3D and Glide settings)]} :CBE" "$(combobox_fix --disabled "${PW_DGV2_RESOLUTION}" "4x app resolution!3x app resolution!2x app resolution!${DGVOODOO2_XRANDR_NEW::-1}")" \ + --field="${CHKBOX_SPACE}FPS LIMIT!${translations[You can configure fps limit. (Direct3D and Glide settings)]} :CBE" "$(combobox_fix --disabled "${PW_DGV2_FPS_LIMIT}" "30!40!45!48!60!75!90!120!144!165!175!240")" \ + --field="${CHKBOX_SPACE}FILTERING!${translations[You can select from various texture filtering modes here. Forcing other than the app default can result in glitches or break some rendering effects. (Glide have max filtering bilinear) (Direct3D and Glide settings)]} :CB" "$(combobox_fix --disabled "${PW_DGV2_FILTERING}" "${DGVOODOO2_FILTERING}")" \ + --field="${CHKBOX_SPACE}ANTIALIASING!${translations[Forcing antialiasing. This can cause artifacts. (Direct3D and Glide settings)]} :CB" "$(combobox_fix --disabled "${PW_DGV2_ANTIALIASING}" "2x!4x!8x")" \ + --field="${CHKBOX_SPACE}BIT DEPTH!${translations[You can define what screen bit depth should be reported through dgVoodoo. (For game MOTO need 16 bit depth) (Direct3D and Glide settings)]} :CB" "$(combobox_fix --disabled "${PW_DGV2_BIT_DEPTH}" "8!16!32")" \ + --field="${CHKBOX_SPACE}VIDEOCARD!${translations[You can select a virtual video card. (For game Quake 2 need Voodoo Graphics or Voodoo Rush card) (Direct3D and Glide settings)]} :CB" "$(combobox_fix "${PW_DGV2_VIDEOCARD}" "${DGVOODOO2_VIDEOCARD}")" \ + --field="${CHKBOX_SPACE}VRAM!${translations[Increase the amount of vram for dgVoodoo2. (Direct3D settings) - dgVoodoo2 SVGA 3D: 16 - 128 - dgVoodoo2 Virtual 3D: 16 - 4096 - Geforce 4 Ti 4800: 64 - 256 - ATI Radeon 8500: 64 - 256 - Matrox Parhelia-512: 128 - 256 - GeForce FX 5700 Ultra: 64 - 256 -- GeForce 9800 GT: 512 - 1024") :CB" "$(combobox_fix "${PW_DGV2_VRAM}" "16!32!64!128!256!512!1024!2048!4096")" \ - --field="${CHKBOX_SPACE}BRIGHTNESS!$(gettext "Brightness can be finetuned here. (Direct3D and Glide settings)") :NUM" "${PW_DGV2_BRIGHTNESS}:!0..400" \ - --field="${CHKBOX_SPACE}COLOR!$(gettext "Color intensity. Finetued it to make colors or less vital compared to the application default, or even Black and White, according to your taste. (Direct3D and Glide settings)") :NUM" "${PW_DGV2_COLOR}:!0..400" \ - --field="${CHKBOX_SPACE}CONTRAST!$(gettext "Contrast is the intensity difference between dark and bright regions. Only static contrast is implemented and you can finetune it here. (Direct3D and Glide settings)") :NUM" "${PW_DGV2_CONTRAST}:!0..400" \ - --field="${CHKBOX_SPACE}DISPLAY ROI!$(gettext "Useful for applications rendering into a widescreen subrectangle inside a 4:3 resolution - the widescreen subrectangle can be defined as display ROI, the input of the scaling process. (Direct3D and Glide settings)") :CBE" "$(combobox_fix --disabled "${PW_DGV2_DISPLAY_ROI}" "3_2!4_3!5_4!16_9!16_10!21_9")" \ - --field="${CHKBOX_SPACE}RESAMPLING!$(gettext "If scaling is done by the dgVoodoo than you can choose which resampling method to use. The more complex filter the more computationally expensive. Available ones in order of complexty. (Direct3D and Glide settings) +- GeForce 9800 GT: 512 - 1024]} :CB" "$(combobox_fix "${PW_DGV2_VRAM}" "16!32!64!128!256!512!1024!2048!4096")" \ + --field="${CHKBOX_SPACE}BRIGHTNESS!${translations[Brightness can be finetuned here. (Direct3D and Glide settings)]} :NUM" "${PW_DGV2_BRIGHTNESS}:!0..400" \ + --field="${CHKBOX_SPACE}COLOR!${translations[Color intensity. Finetued it to make colors or less vital compared to the application default, or even Black and White, according to your taste. (Direct3D and Glide settings)]} :NUM" "${PW_DGV2_COLOR}:!0..400" \ + --field="${CHKBOX_SPACE}CONTRAST!${translations[Contrast is the intensity difference between dark and bright regions. Only static contrast is implemented and you can finetune it here. (Direct3D and Glide settings)]} :NUM" "${PW_DGV2_CONTRAST}:!0..400" \ + --field="${CHKBOX_SPACE}DISPLAY ROI!${translations[Useful for applications rendering into a widescreen subrectangle inside a 4:3 resolution - the widescreen subrectangle can be defined as display ROI, the input of the scaling process. (Direct3D and Glide settings)]} :CBE" "$(combobox_fix --disabled "${PW_DGV2_DISPLAY_ROI}" "3_2!4_3!5_4!16_9!16_10!21_9")" \ + --field="${CHKBOX_SPACE}RESAMPLING!${translations[If scaling is done by the dgVoodoo than you can choose which resampling method to use. The more complex filter the more computationally expensive. Available ones in order of complexty. (Direct3D and Glide settings) - Point sampled (unblurred pixels) - Bilinear (smoothed) - Lanczos-2 (smoothed but sharper) - Bicubic (smoothed but sharper) -- Lanczos-3 (smoothed, sharpest)") :CB" "$(combobox_fix --disabled "${PW_DGV2_RESAMPLING}" "${DGVOODOO2_RESAMPLING}")" \ - --field="${CHKBOX_SPACE}CURSOR SCALE!$(gettext "Integer scale factor of the emulated hardware mouse cursor. 0: calculated from the application and forced resolution. (Direct3D and Glide settings)") :NUM" "${PW_DGV2_CURSOR_SCALE}:!0..5" \ +- Lanczos-3 (smoothed, sharpest)]} :CB" "$(combobox_fix --disabled "${PW_DGV2_RESAMPLING}" "${DGVOODOO2_RESAMPLING}")" \ + --field="${CHKBOX_SPACE}CURSOR SCALE!${translations[Integer scale factor of the emulated hardware mouse cursor. 0: calculated from the application and forced resolution. (Direct3D and Glide settings)]} :NUM" "${PW_DGV2_CURSOR_SCALE}:!0..5" \ 1> "${PW_TMPFS_PATH}/tmp_yad_dgv2_set_cb" 2>/dev/null & "${pw_yad}" --paned --key=$KEY_DGV2_GUI --height="350" --title="dgVoodoo2" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --gui-type="settings-paned" \ - --button="$(gettext "CANCEL THE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Cancel the current changes and return to the previous menu")":1 \ - --button="$(gettext "RESET") DGVOODOO2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Restore default settings for") dgVoodoo2":162 \ - --button="$(gettext "DISABLE") DGVOODOO2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Disable dgVoodoo2 and go to the previous menu")":164 \ - --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":166 \ + --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} DGVOODOO2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} dgVoodoo2":162 \ + --button="${translations[DISABLE]} DGVOODOO2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable dgVoodoo2 and go to the previous menu]}":164 \ + --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":166 \ 2>/dev/null YAD_DGV2_STATUS="$?" @@ -4586,32 +4657,28 @@ gui_gamescope () { rm_from_var PW_GS_LIST "PW_GS_FORCE_GRAB_KEYBOARD" fi -if [[ "${SKIP_GAMESCOPE_TEXT_INFO}" != "1" ]] ; then - export PW_GS_FULLSCREEN_INFO=$(gettext 'Make the window fullscreen') - export PW_GS_FORCE_FULLSCREEN_INFO=$(gettext 'Force windows inside of gamescope to be the size of the nested display (fullscreen)') - export PW_GS_BORDERLESS_WINDOW_INFO=$(gettext 'Make the window borderless. Working only with backend sdl or X11 session.') - export PW_GS_FORCE_GRAB_KEYBOARD_INFO=$(gettext 'Grab the keyboard') - export PW_GS_FORCE_GRAB_CURSOR_INFO=$(gettext 'Always use relative mouse mode instead of flipping dependent on cursor visibility.') - export PW_GS_HDR_ENABLE_INFO=$(gettext 'Enable HDR output (needs Gamescope WSI layer enabled for support from clients). If this is not set, and there is a HDR client, it will be tonemapped SDR'.) - export PW_GS_ENABLE_GAMESCOPE_WSI_INFO=$(gettext 'This can be useful for some HDR options and for some DXVK v2.3 vsync optimisations') - export PW_GS_SDR_GAMMUT_WIDENESS_INFO=$(gettext "Set the 'wideness' of the gamut for SDR comment. 0 - 1.") - export PW_GS_HDR_ITM_ENABLE_INFO=$(gettext 'Enable SDR->HDR inverse tone mapping. only works for SDR input.') - export PW_GS_FORCE_COMPOSITION_INFO=$(gettext 'Disables direct scan-out') - export PW_GS_HDR_FORCE_SUPPORT_INFO=$(gettext 'Forces support for HDR and associated opptions even if the current display does not support it') - export PW_GS_HDR_FORCE_OUTPUT_INFO=$(gettext "Forces support and output to HDR10 PQ even if the output does not support it (will look very wrong if it doesn't)") - export PW_GS_HDR_FORCE_HEATMAP_INFO=$(gettext 'Displays a heatmap-style debug view of HDR luminence across the scene in nits.') - export PW_GS_EXPOSE_WAYLAND_INFO=$(gettext 'Expose Wayland clients using xdg-shell') - export PW_GS_REALTIME_SCHEDULING_INFO=$(gettext 'Enable GameScope realtime scheduling') - export PW_GS_MANGOAPP_INFO=$(gettext 'Launch with the mangoapp (mangohud) performance overlay enabled. You should use this instead of using mangohud on the game or gamescope.') - export PW_GS_BACKEND_SDL_INFO=$(gettext 'Use sdl backend. (by default wayland backend is used).') - export PW_GS_SDL_VIDEODRIVER_X11_INFO=$(gettext 'Force use sdl videodriver x11, works with BACKEND SDL. (Default is wayland)') - - export SKIP_GAMESCOPE_TEXT_INFO="1" -fi + PW_GS_FULLSCREEN_INFO=${translations[Make the window fullscreen]} + PW_GS_FORCE_FULLSCREEN_INFO=${translations[Force windows inside of gamescope to be the size of the nested display (fullscreen)]} + PW_GS_BORDERLESS_WINDOW_INFO=${translations[Make the window borderless. Working only with backend sdl or X11 session.]} + PW_GS_FORCE_GRAB_KEYBOARD_INFO=${translations[Grab the keyboard]} + PW_GS_FORCE_GRAB_CURSOR_INFO=${translations[Always use relative mouse mode instead of flipping dependent on cursor visibility.]} + PW_GS_HDR_ENABLE_INFO=${translations[Enable HDR output (needs Gamescope WSI layer enabled for support from clients). If this is not set, and there is a HDR client, it will be tonemapped SDR.]} + PW_GS_ENABLE_GAMESCOPE_WSI_INFO=${translations[This can be useful for some HDR options and for some DXVK v2.3 vsync optimisations]} + PW_GS_SDR_GAMMUT_WIDENESS_INFO=${translations[Set the \'wideness\' of the gamut for SDR comment. 0 - 1.]} + PW_GS_HDR_ITM_ENABLE_INFO=${translations[Enable SDR->HDR inverse tone mapping. only works for SDR input.]} + PW_GS_FORCE_COMPOSITION_INFO=${translations[Disables direct scan-out]} + PW_GS_HDR_FORCE_SUPPORT_INFO=${translations[Forces support for HDR and associated opptions even if the current display does not support it]} + PW_GS_HDR_FORCE_OUTPUT_INFO=${translations[Forces support and output to HDR10 PQ even if the output does not support it (will look very wrong if it doesn\'t)]} + PW_GS_HDR_FORCE_HEATMAP_INFO=${translations[Displays a heatmap-style debug view of HDR luminence across the scene in nits.]} + PW_GS_EXPOSE_WAYLAND_INFO=${translations[Expose Wayland clients using xdg-shell]} + PW_GS_REALTIME_SCHEDULING_INFO=${translations[Enable GameScope realtime scheduling]} + PW_GS_MANGOAPP_INFO=${translations[Launch with the mangoapp (mangohud) performance overlay enabled. You should use this instead of using mangohud on the game or gamescope.]} + PW_GS_BACKEND_SDL_INFO=${translations[Use sdl backend. (by default wayland backend is used).]} + PW_GS_SDL_VIDEODRIVER_X11_INFO=${translations[Force use sdl videodriver x11, works with BACKEND SDL. (Default is wayland)]} unset ADD_CHK_BOX_GS if [[ "${GAMESCOPE_INSTALLED}" == 1 ]] ; then - GAMESCOPE_NEED_INSTALL="$(gettext "Change settings gamescope for") ${PORTWINE_DB}\n $(gettext "NOTE: To display help for each item, simply hover your mouse over the text")" + GAMESCOPE_NEED_INSTALL="${translations[Change settings gamescope for]} ${PORTWINE_DB}\n ${translations[NOTE: To display help for each item, simply hover your mouse over the text]}" GS_CB="CB" && GS_CBE="CBE" && GS_NUM="NUM" && GS_NUMN="NUMN" for int_to_boole in ${PW_GS_LIST} ; do if [[ "${!int_to_boole}" == "1" ]] @@ -4626,10 +4693,10 @@ fi if check_flatpak ; then GAMESCOPE_VERSION="$(grep 'VERSION_ID=' /etc/os-release)" GAMESCOPE_VERSION="${GAMESCOPE_VERSION//VERSION_ID=/}" - GAMESCOPE_NEED_INSTALL="$(eval_gettext "Gamescope is not detected on the system, to install it, run the command in the terminal:\n flatpak install -y runtime/org.freedesktop.Platform.VulkanLayer.gamescope/x86_64/\${GAMESCOPE_VERSION}\n (Can be selected and copied)")" + GAMESCOPE_NEED_INSTALL="${translations[Gamescope is not detected on the system, to install it, run the command in the terminal:\\nflatpak install -y runtime/org.freedesktop.Platform.VulkanLayer.gamescope/x86_64/]}${GAMESCOPE_VERSION}\n${translations[(Can be selected and copied)]}" YAD_TEXT_SELECTION="--selectable-labels" else - GAMESCOPE_NEED_INSTALL="$(gettext "Gamescope is not detected on the system, please contact the manufacturer of your distribution\n or search the Internet for information on how to install gamescope on your system.")" + GAMESCOPE_NEED_INSTALL="${translations[Gamescope is not detected on the system, please contact the manufacturer of your distribution\\nor search the Internet for information on how to install gamescope on your system.]}" fi GS_CB="DCB" && GS_CBE="DCBE" && GS_NUM="DNUM" && GS_NUMN="DNUMN" PW_GS_SHOW_RESOLUTION="disabled" @@ -4671,31 +4738,31 @@ fi "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="2" --form --columns=2 --separator="%" --homogeneous-row \ --gui-type-text="${PANED_GUI_TYPE_TEXT_DOWN}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \ - --field="${CHKBOX_SPACE}$(gettext "Show resolution")!$(gettext "Set the resolution used by gamescope. Resizing the gamescope window will update these settings. Defaults to 1280x720.") :${GS_CBE}" "$(combobox_fix --disabled "${PW_GS_SHOW_RESOLUTION}" "${GAMESCOPE_XRANDR_NEW::-1}")" \ - --field="${CHKBOX_SPACE}$(gettext "Internal resolution")!$(gettext "Scale internal resolution (0.0 is unused)") :${GS_NUMN}" "${PW_GS_INTERNAL_RESOLUTION}:!0..2" \ - --field="${CHKBOX_SPACE}$(gettext "Frame limit")!$(gettext "Set a framerate limit. Specified in frames per second") :${GS_CBE}" "$(combobox_fix --disabled "${PW_GS_FRAME_LIMIT}" "30!40!45!48!60!75!90!120!144!165!175!240")" \ - --field="${CHKBOX_SPACE}$(gettext "Mesa vulkan WSI")!$(gettext "Overrides the WSI present mode: + --field="${CHKBOX_SPACE}${translations[Show resolution]}!${translations[Set the resolution used by gamescope. Resizing the gamescope window will update these settings. Defaults to 1280x720.]} :${GS_CBE}" "$(combobox_fix --disabled "${PW_GS_SHOW_RESOLUTION}" "${GAMESCOPE_XRANDR_NEW::-1}")" \ + --field="${CHKBOX_SPACE}${translations[Internal resolution]}!${translations[Scale internal resolution (0.0 is unused)]} :${GS_NUMN}" "${PW_GS_INTERNAL_RESOLUTION}:!0..2" \ + --field="${CHKBOX_SPACE}${translations[Frame limit]}!${translations[Set a framerate limit. Specified in frames per second]} :${GS_CBE}" "$(combobox_fix --disabled "${PW_GS_FRAME_LIMIT}" "30!40!45!48!60!75!90!120!144!165!175!240")" \ + --field="${CHKBOX_SPACE}${translations[Mesa vulkan WSI]}!${translations[Overrides the WSI present mode: fifo - First in, first out. Limits the frame rate + no tearing. (VSync) immediate - Unlimited frame rate + tearing. mailbox - Triple buffering. Unlimited frame rate + no tearing. -relaxed - Same as fifo but allows tearing when below the monitors refresh rate.") :${GS_CB}" "$(combobox_fix --disabled "${PW_GS_MESA_VK_WSI_PRESENT_MODE}" "fifo!immediate!mailbox!relaxed")" \ - --field="${CHKBOX_SPACE}$(gettext "Scaler mode")!$(gettext "Specify how to scale the GameScope window content") :${GS_CB}" "$(combobox_fix --disabled "${PW_GS_SCALER_MODE}" "auto!integer!fit!fill!stretch")" \ - --field="${CHKBOX_SPACE}$(gettext "Filter mode")!$(gettext "Use a filter such as AMD FidelityFX SuperResolution 1.0 (FSR) or NVIDIA Image Scaling v1.0.3 (NIS)") :${GS_CB}" "$(combobox_fix --disabled "${PW_GS_FILTER_MODE}" "${GS_FILTER_CB}")" \ - --field="${CHKBOX_SPACE}$(gettext "Upscale sharpness")!$(gettext "Sharpening value for FidelityFX SuperResolution 1.0 (FSR) and NVIDIA Image Scaling v1.0.3 (NIS). 0 is max sharpening, 20 is min sharpening.") :${GS_NUM}" "${PW_GS_UPSCALE_SHARPNESS}:!0..20" \ - --field="${CHKBOX_SPACE}$(gettext "Max scale factor")!$(gettext "Maximum Scale Factor. Working only on X11 or backend sdl (0.0 is unused)") :${GS_NUMN}" "${PW_GS_MAX_SCALE_FACTOR}:!0..100" \ - --field="${CHKBOX_SPACE}$(gettext "Mouse sensitivity")!$(gettext "Configurable mouse sensitivity, multiply mouse movement by specified decimal number amount") :${GS_NUMN}" "${PW_GS_MOUSE_SENSITIVITY}:!0..100" \ - --field="${CHKBOX_SPACE}$(gettext "HDR SDR nits")!$(gettext "Set the luminance of SDR content in nits. Default: 400 nits.") :${GS_NUM}" "${PW_GS_SDR_CONTENT_NITS}:!0..10000" \ - --field="${CHKBOX_SPACE}$(gettext "HDR inverse SDR")!$(gettext "Set the luminance of SDR content in nets used as the input for the inverse tone mapping process - Maximum is 1000 nits") :${GS_NUM}" "${PW_GS_ITM_SDR_NITS}:!0..1000" \ - --field="${CHKBOX_SPACE}$(gettext "HDR inverse target")!$(gettext "Set the target luninance of the inverse tone mapping process - Max is 10000 nits") :${GS_NUM}" "${PW_GS_ITM_TARGET_NITS}:!0..10000" \ +relaxed - Same as fifo but allows tearing when below the monitors refresh rate.]} :${GS_CB}" "$(combobox_fix --disabled "${PW_GS_MESA_VK_WSI_PRESENT_MODE}" "fifo!immediate!mailbox!relaxed")" \ + --field="${CHKBOX_SPACE}${translations[Scaler mode]}!${translations[Specify how to scale the GameScope window content]} :${GS_CB}" "$(combobox_fix --disabled "${PW_GS_SCALER_MODE}" "auto!integer!fit!fill!stretch")" \ + --field="${CHKBOX_SPACE}${translations[Filter mode]}!${translations[Use a filter such as AMD FidelityFX SuperResolution 1.0 (FSR) or NVIDIA Image Scaling v1.0.3 (NIS)]} :${GS_CB}" "$(combobox_fix --disabled "${PW_GS_FILTER_MODE}" "${GS_FILTER_CB}")" \ + --field="${CHKBOX_SPACE}${translations[Upscale sharpness]}!${translations[Sharpening value for FidelityFX SuperResolution 1.0 (FSR) and NVIDIA Image Scaling v1.0.3 (NIS). 0 is max sharpening, 20 is min sharpening.]} :${GS_NUM}" "${PW_GS_UPSCALE_SHARPNESS}:!0..20" \ + --field="${CHKBOX_SPACE}${translations[Max scale factor]}!${translations[Maximum Scale Factor. Working only on X11 or backend sdl (0.0 is unused)]} :${GS_NUMN}" "${PW_GS_MAX_SCALE_FACTOR}:!0..100" \ + --field="${CHKBOX_SPACE}${translations[Mouse sensitivity]}!${translations[Configurable mouse sensitivity, multiply mouse movement by specified decimal number amount]} :${GS_NUMN}" "${PW_GS_MOUSE_SENSITIVITY}:!0..100" \ + --field="${CHKBOX_SPACE}${translations[HDR SDR nits]}!${translations[Set the luminance of SDR content in nits. Default: 400 nits.]} :${GS_NUM}" "${PW_GS_SDR_CONTENT_NITS}:!0..10000" \ + --field="${CHKBOX_SPACE}${translations[HDR inverse SDR]}!${translations[Set the luminance of SDR content in nets used as the input for the inverse tone mapping process - Maximum is 1000 nits]} :${GS_NUM}" "${PW_GS_ITM_SDR_NITS}:!0..1000" \ + --field="${CHKBOX_SPACE}${translations[HDR inverse target]}!${translations[Set the target luninance of the inverse tone mapping process - Max is 10000 nits]} :${GS_NUM}" "${PW_GS_ITM_TARGET_NITS}:!0..10000" \ 1> "${PW_TMPFS_PATH}/tmp_yad_gs_set_cb" 2>/dev/null & "${pw_yad}" --paned --key="$KEY_GS_GUI" --title="GameScope" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --gui-type="settings-paned" \ - --button="$(gettext "CANCEL THE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Cancel the current changes and return to the previous menu")":1 \ - --button="$(gettext "RESET") GAMESCOPE"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Restore default settings for") GameScope":162 \ - --button="$(gettext "DISABLE") GAMESCOPE"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Disable GameScope and go to the previous menu")":164 \ - --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":166 \ + --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} GAMESCOPE"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} GameScope":162 \ + --button="${translations[DISABLE]} GAMESCOPE"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable GameScope and go to the previous menu]}":164 \ + --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":166 \ 2>/dev/null YAD_GAMESCOPE_STATUS="$?" @@ -4768,8 +4835,8 @@ gui_userconf () { fi if [[ "$DOWNLOAD_STEAM_GRID" == "1" ]] - then NEW_STEAM_BEHAVIOR="$(gettext "Disable")" - else NEW_STEAM_BEHAVIOR="$(gettext "Enable")" + then NEW_STEAM_BEHAVIOR="${translations[Disable]}" + else NEW_STEAM_BEHAVIOR="${translations[Enable]}" fi if [[ "$PW_GUI_START" == "NOTEBOOK" ]] @@ -4780,12 +4847,12 @@ gui_userconf () { KEY_USERCONF_GUI=$RANDOM "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="1" --form --columns=2 --separator=" " --text-align=center \ - --text "$(gettext "Change settings for") user.conf\n $(gettext "NOTE: To display help for each item, simply hover your mouse over the text")" \ + --text "${translations[Change settings for]} user.conf\n ${translations[NOTE: To display help for each item, simply hover your mouse over the text]}" \ --align-buttons --homogeneous-column --gui-type-text="${PANED_GUI_TYPE_TEXT_UP}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_UP}" \ - --field=" $(gettext "Change mirror to") $NEW_MIRROR"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Depending on which mirror is selected, updates will be downloaded from there.")":"FBTN" '@bash -c "button_click --userconf change_mirror"' \ - --field=" $(gettext "Change branch to") $NEW_BRANCH"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Depending on the version of the scripts, PortProton will receive the latest changes first (the DEVEL branch), the STABLE branch is updated later and is stable.")":"FBTN" '@bash -c "button_click --userconf change_branch"' \ - --field=" $(gettext "Change start gui to") $NEW_START_GUI"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "When using PANED in the game start menu, additional buttons are located on one large page; if NOTEBOOK, then they are divided into several.")":"FBTN" '@bash -c "button_click --userconf change_gui_start"' \ - --field=" $NEW_STEAM_BEHAVIOR $(gettext "steam covers download")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "If downloading steam covers is enabled, they will be downloaded and created. (Disablement is provided in cases where their downloading is unavailable for some reason)")":"FBTN" '@bash -c "button_click --userconf change_download_grid"' \ + --field=" ${translations[Change mirror to]} $NEW_MIRROR"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Depending on which mirror is selected, updates will be downloaded from there.]}":"FBTN" '@bash -c "button_click --userconf change_mirror"' \ + --field=" ${translations[Change branch to]} $NEW_BRANCH"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Depending on the version of the scripts, PortProton will receive the latest changes first (the DEVEL branch), the STABLE branch is updated later and is stable.]}":"FBTN" '@bash -c "button_click --userconf change_branch"' \ + --field=" ${translations[Change start gui to]} $NEW_START_GUI"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[When using PANED in the game start menu, additional buttons are located on one large page; if NOTEBOOK, then they are divided into several.]}":"FBTN" '@bash -c "button_click --userconf change_gui_start"' \ + --field=" $NEW_STEAM_BEHAVIOR ${translations[steam covers download]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[If downloading steam covers is enabled, they will be downloaded and created. (Disablement is provided in cases where their downloading is unavailable for some reason)]}":"FBTN" '@bash -c "button_click --userconf change_download_grid"' \ 2>/dev/null & if [[ -n "${PW_SOUND_DRIVER_USE}" ]] \ @@ -4806,19 +4873,19 @@ gui_userconf () { "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="2" --form --columns=1 --separator="%" --homogeneous-row \ --gui-type-text="${PANED_GUI_TYPE_TEXT_DOWN}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \ - --field="$(gettext "Choose a graphics card to run the game")!$(gettext "Select which video card will be used to run the game (used for all running games and programs in PortProton)") :CB" "$(combobox_fix --disabled "${GPU_VAR}" "${GET_GPU_NAMES}")" \ - --field="$(gettext "Choice wine audio driver")!$(gettext "Fixes sound popling if choice alsa") :CB" "$(combobox_fix --disabled "${SOUND_DRIVER_VAR}" "alsa!oss!pulse")" \ - --field="$(gettext "Choice gui themes")!$(gettext "Allows you to select a theme for PortProton") :CB" "$(combobox_fix "${GUI_THEME}" "default!compact!classic")" \ + --field="${translations[Choose a graphics card to run the game]}!${translations[Select which video card will be used to run the game (used for all running games and programs in PortProton)]} :CB" "$(combobox_fix --disabled "${GPU_VAR}" "${GET_GPU_NAMES}")" \ + --field="${translations[Choice wine audio driver]}!${translations[Fixes sound popling if choice alsa]} :CB" "$(combobox_fix --disabled "${SOUND_DRIVER_VAR}" "alsa!oss!pulse")" \ + --field="${translations[Choice gui themes]}!${translations[Allows you to select a theme for PortProton]} :CB" "$(combobox_fix "${GUI_THEME}" "default!compact!classic")" \ 1> "${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb" 2>/dev/null & "${pw_yad}" --key=$KEY_USERCONF_GUI --paned --sensitive \ - --title="$(gettext "SETTINGS USER.CONF")" \ + --title="${translations[SETTINGS USER.CONF]}" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --gui-type="settings-paned" \ - --button="$(gettext "CANCEL THE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Cancel the current changes and return to the previous menu")":1 \ - --button="$(gettext "RESET") USER.CONF"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Restore default settings for") user.conf":2 \ - --button="$(gettext "OPEN THE SETTINGS FILE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Open the user.conf settings file in a system text editor to view and change variables manually")":164 \ - --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":166 \ + --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} USER.CONF"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} user.conf":2 \ + --button="${translations[OPEN THE SETTINGS FILE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open the user.conf settings file in a system text editor to view and change variables manually]}":164 \ + --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":166 \ 2>/dev/null YAD_USERCONF_STATUS="$?" @@ -4827,7 +4894,7 @@ gui_userconf () { restart_pp ;; 2) - if yad_question "$(gettext "Do you really want to reset settings for") user.conf?" + if yad_question "${translations[Do you really want to reset settings for]} user.conf?" then try_remove_file "$USER_CONF" exit 0 @@ -4875,7 +4942,7 @@ resize_png () { local RESIZE_NAME_PNG="${2// /_}" local RESIZE_TO="$3" fi - + [[ -f "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" ]] && return 0 try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" @@ -4925,34 +4992,34 @@ portwine_create_shortcut () { [[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}" if [[ "$1" == "block_name" ]] ; then - OUTPUT=$("${pw_yad}" --title="$(gettext "Choices")" --form \ + OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \ --gui-type="settings-shortcut" \ --gui-type-box="${NOTEBOOK_GUI_TYPE_BOX}" --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" \ --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" --gui-type-images="${NOTEBOOK_GUI_TYPE_IMAGE}" \ --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \ --image "${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" \ - --text-align="center" --text "$(gettext "The shortcut will be created in the PortProton directory.")" \ + --text-align="center" --text "${translations[The shortcut will be created in the PortProton directory.]}" \ --field=" ${name_desktop}":LBL "" \ - --field=" $(gettext "Add shortcut to MENU -> GAMES")":CHK "$PW_SHORTCUT_MENU" \ - --field=" $(gettext "Add shortcut to Desktop")":CHK "$PW_SHORTCUT_DESKTOP" \ - --field=" $(gettext "Add shortcut to STEAM library")":CHK "$PW_SHORTCUT_STEAM" \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ - --button="$(gettext "CREATE SHORTCUT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + --field=" ${translations[Add shortcut to MENU -> GAMES]}":CHK "$PW_SHORTCUT_MENU" \ + --field=" ${translations[Add shortcut to Desktop]}":CHK "$PW_SHORTCUT_DESKTOP" \ + --field=" ${translations[Add shortcut to STEAM library]}":CHK "$PW_SHORTCUT_STEAM" \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ + --button="${translations[CREATE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) PW_YAD_OUT=$? else - OUTPUT=$("${pw_yad}" --title="$(gettext "Choices")" --form \ + OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \ --gui-type="settings-shortcut" \ --gui-type-box="${NOTEBOOK_GUI_TYPE_BOX}" --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" \ --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" --gui-type-images="${NOTEBOOK_GUI_TYPE_IMAGE}" \ --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \ --image "${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" \ - --text-align="center" --text "$(gettext "The shortcut will be created in the PortProton directory.")" \ - --field="$(gettext "Name")" "${name_desktop}" \ - --field=" $(gettext "Add shortcut to MENU -> GAMES")":CHK "$PW_SHORTCUT_MENU" \ - --field=" $(gettext "Add shortcut to Desktop")":CHK "$PW_SHORTCUT_DESKTOP" \ - --field=" $(gettext "Add shortcut to STEAM library")":CHK "$PW_SHORTCUT_STEAM" \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ - --button="$(gettext "CREATE SHORTCUT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + --text-align="center" --text "${translations[The shortcut will be created in the PortProton directory.]}" \ + --field="${translations[Name]}" "${name_desktop}" \ + --field=" ${translations[Add shortcut to MENU -> GAMES]}":CHK "$PW_SHORTCUT_MENU" \ + --field=" ${translations[Add shortcut to Desktop]}":CHK "$PW_SHORTCUT_DESKTOP" \ + --field=" ${translations[Add shortcut to STEAM library]}":CHK "$PW_SHORTCUT_STEAM" \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ + --button="${translations[CREATE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) PW_YAD_OUT=$? fi @@ -5020,8 +5087,8 @@ portwine_create_shortcut () { "${PORT_SCRIPTS_PATH}/add_in_steam.sh" done if [[ "${PW_SKIP_RESTART_STEAM}" != 1 ]] && pgrep -i steam &>/dev/null ; then - if yad_question "$(gettext "For adding shortcut to STEAM, needed restart.\n\nRestart STEAM now?")" ; then - pw_start_progress_bar_block "$(gettext "Restarting STEAM... Please wait.")" + if yad_question "${translations[For adding shortcut to STEAM, needed restart.\\n\\nRestart STEAM now?]}" ; then + pw_start_progress_bar_block "${translations[Restarting STEAM... Please wait.]}" kill -s SIGTERM $(pgrep -a steam) &>/dev/null while pgrep -i steam &>/dev/null ; do sleep 0.5 @@ -5111,7 +5178,7 @@ pw_auto_create_shortcut () { link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") fi - + try_remove_file "$link_file" if ! exe_path="$(realpath "${link_path}" 2>/dev/null)" ; then @@ -5154,12 +5221,12 @@ portwine_delete_shortcut () { } portwine_missing_shortcut () { - "${pw_yad}" --title="$(gettext "Error")" --form \ + "${pw_yad}" --title="${translations[Error]}" --form \ --window-icon "$PW_GUI_ICON_PATH/portproton.svg" --fixed \ --image "$PW_GUI_ICON_PATH/error.svg" \ - --text "\n$(gettext "Could not find the file:")\n${portwine_exe}\n\n$(gettext "ATTENTION:\nIf you forgot to mount the disk with the running application, click CANCEL!")\n" \ - --button="$(gettext "DELETE SHORTCUT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 + --text "\n${translations[Could not find the file:]}\n${portwine_exe}\n\n${translations[ATTENTION:\\nIf you forgot to mount the disk with the running application, click CANCEL!]}\n" \ + --button="${translations[DELETE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 if [[ $? -eq "0" ]] ; then portwine_delete_shortcut fi @@ -5174,7 +5241,7 @@ pw_prefix_manager () { touch "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" fi - pw_start_progress_bar_block "$(gettext "Starting prefix manager:") $PW_PREFIX_NAME" + pw_start_progress_bar_block "${translations[Starting prefix manager:]} $PW_PREFIX_NAME" "${PORT_WINE_TMP_PATH}/winetricks" dlls list | awk -F'(' '{print $1}' 1> "${PW_TMPFS_PATH}/dll_list" "${PORT_WINE_TMP_PATH}/winetricks" fonts list | awk -F'(' '{print $1}' 1> "${PW_TMPFS_PATH}/fonts_list" "${PORT_WINE_TMP_PATH}/winetricks" settings list | awk -F'(' '{print $1}' 1> "${PW_TMPFS_PATH}/settings_list" @@ -5217,33 +5284,33 @@ pw_prefix_manager () { KEY_EDIT_MANAGER_GUI=$RANDOM "${pw_yad}" --plug=$KEY_EDIT_MANAGER_GUI --tabnum=1 --list --checklist \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --text="$(gettext 'Select components to install in prefix:') \"${PW_PREFIX_NAME}\", $(gettext 'using wine:') \"${PW_WINE_USE}\"" \ - --column="$(gettext "Set")" --column="$(gettext "Libraries")" \ - --column="$(gettext "Information")" < "${PW_TMPFS_PATH}/dll_list_tmp" 1>> "${PW_TMPFS_PATH}/to_winetricks" 2>/dev/null & + --text="${translations[Select components to install in prefix:]} \"${PW_PREFIX_NAME}\", ${translations[using wine:]} \"${PW_WINE_USE}\"" \ + --column="${translations[Set]}" --column="${translations[Libraries]}" \ + --column="${translations[Information]}" < "${PW_TMPFS_PATH}/dll_list_tmp" 1>> "${PW_TMPFS_PATH}/to_winetricks" 2>/dev/null & "${pw_yad}" --plug=$KEY_EDIT_MANAGER_GUI --tabnum=2 --list --checklist \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --text="$(gettext 'Select fonts to install in prefix:') \"${PW_PREFIX_NAME}\", $(gettext 'using wine:') \"${PW_WINE_USE}\"" \ - --column="$(gettext "Set")" --column="$(gettext "Libraries")" \ - --column="$(gettext "Information")" < "${PW_TMPFS_PATH}/fonts_list_tmp" 1>> "${PW_TMPFS_PATH}/to_winetricks" 2>/dev/null & + --text="${translations[Select fonts to install in prefix:]} \"${PW_PREFIX_NAME}\", ${translations[using wine:]} \"${PW_WINE_USE}\"" \ + --column="${translations[Set]}" --column="${translations[Libraries]}" \ + --column="${translations[Information]}" < "${PW_TMPFS_PATH}/fonts_list_tmp" 1>> "${PW_TMPFS_PATH}/to_winetricks" 2>/dev/null & "${pw_yad}" --plug=$KEY_EDIT_MANAGER_GUI --tabnum=3 --list --checklist \ --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" \ - --text="$(gettext 'Change config for prefix:') \"${PW_PREFIX_NAME}\"" \ - --column="$(gettext "Set")" --column="$(gettext "Libraries")" \ - --column="$(gettext "Information")" < "${PW_TMPFS_PATH}/settings_list_tmp" 1>> "${PW_TMPFS_PATH}/to_winetricks" 2>/dev/null & + --text="${translations[Change config for prefix:]} \"${PW_PREFIX_NAME}\"" \ + --column="${translations[Set]}" --column="${translations[Libraries]}" \ + --column="${translations[Information]}" < "${PW_TMPFS_PATH}/settings_list_tmp" 1>> "${PW_TMPFS_PATH}/to_winetricks" 2>/dev/null & "${pw_yad}" --key=$KEY_EDIT_MANAGER_GUI --notebook \ --width=700 --height=700 --expand \ --gui-type="settings-notebook" \ - --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$(gettext 'PREFIX MANAGER')" \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="$(gettext "FORCE INSTALL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Installation with forced redownload of libraries")":2 \ - --button="$(gettext "INSTALL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Standard installation.")":0 \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[PREFIX MANAGER]}" \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="${translations[FORCE INSTALL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Installation with forced redownload of libraries]}":2 \ + --button="${translations[INSTALL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Standard installation.]}":0 \ --tab-pos="top" \ - --tab="$(gettext 'DLLS')"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext 'FONTS')"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext 'SETTINGS')"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null + --tab="${translations[DLLS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[FONTS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null YAD_STATUS="$?" try_remove_file "${PW_TMPFS_PATH}/dll_list_tmp" @@ -5298,11 +5365,11 @@ portwine_start_debug () { export PW_LOG=1 if [[ -z "$VULKAN_DRIVER_NAME" ]] || [[ "$VULKAN_DRIVER_NAME" == "llvmpipe" ]] ; then pw_notify_send -i warning \ - "$(gettext "Attention working version of vulkan not detected!")" \ - "$(gettext "It is recommended to run games in OpenGL (low performance possible)!")" + "${translations[Attention working version of vulkan not detected!]}" \ + "${translations[It is recommended to run games in OpenGL (low performance possible)!]}" fi - echo "$(gettext "PortProton was launched in creation mode PortProton.log and it is successfully stored in the root directory of the port")" > "${PORT_WINE_PATH}/PortProton.log" - echo "$(gettext "To diagnose the problem, copy ALL of the log to discord server: https://discord.gg/FTaheP99wE")" >> "${PORT_WINE_PATH}/PortProton.log" + echo "${translations[PortProton was launched in creation mode PortProton.log and it is successfully stored in the root directory of the port]}" > "${PORT_WINE_PATH}/PortProton.log" + echo "${translations[To diagnose the problem, copy ALL of the log to discord server: https://discord.gg/FTaheP99wE]}" >> "${PORT_WINE_PATH}/PortProton.log" echo "-------------------------------------------------------------" >> "${PORT_WINE_PATH}/PortProton.log" echo "PortWINE version:" >> "${PORT_WINE_PATH}/PortProton.log" read install_ver < "${PORT_WINE_TMP_PATH}/PortProton_ver" @@ -5459,7 +5526,7 @@ portwine_start_debug () { PW_TIMER=1 fi done < "${PORT_WINE_PATH}/PortProton.log" | "${pw_yad}" --text-info --tail --button="STOP"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 --title="DEBUG" \ - --skip-taskbar --width=800 --height=400 --text "$(gettext "Please wait! After finishing the PortProton, click STOP.")" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" 2>/dev/null && + --skip-taskbar --width=800 --height=400 --text "${translations[Please wait! After finishing the PortProton, click STOP.]}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" 2>/dev/null && kill_portwine sed -i '/.fx$/d' "${PORT_WINE_PATH}/PortProton.log" sed -i '/HACK_does_openvr_work/d' "${PORT_WINE_PATH}/PortProton.log" @@ -5479,9 +5546,9 @@ portwine_start_debug () { pw_create_prefix_backup () { cd "$HOME" PW_PREFIX_TO_BACKUP=$("${pw_yad}" --file --directory --width=800 --height=500 \ - --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$(gettext "BACKUP PREFIX TO...")" \ - --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="$(gettext "OK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[BACKUP PREFIX TO...]}" \ + --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) YAD_STATUS="$?" if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then @@ -5510,13 +5577,13 @@ EOF try_remove_file "${PORT_WINE_TMP_PATH}"/pp_pfx_backup.sh if [[ -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" ]] ; then mv -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack" - yad_info "$(gettext "Backup has been successfully created for prefix:") $PW_PREFIX_NAME" + yad_info "${translations[Backup has been successfully created for prefix:]} $PW_PREFIX_NAME" if [[ ! -f "${PORT_WINE_TMP_PATH}/pfx_backup_info" ]] ; then - yad_info "$(gettext "Attention! Do not pass the resev copy to third parties, there is a risk of losing accounts!")" + yad_info "${translations[Attention! Do not pass the resev copy to third parties, there is a risk of losing accounts!]}" echo "1" > "${PORT_WINE_TMP_PATH}/pfx_backup_info" fi else - yad_error "$(gettext "An error occurred while backing up the prefix:") $PW_PREFIX_NAME" + yad_error "${translations[An error occurred while backing up the prefix:]} $PW_PREFIX_NAME" fi restart_pp } @@ -5579,7 +5646,7 @@ run_desktop_b_click () { export -f run_desktop_b_click gui_clear_pfx () { - if yad_question "$(gettext "Do you want to clear prefix in PortProton?")" ; then + if yad_question "${translations[Do you want to clear prefix in PortProton?]}" ; then pw_clear_pfx print_info "Restarting PP after clearing prefix..." restart_pp @@ -5588,7 +5655,7 @@ gui_clear_pfx () { export -f gui_clear_pfx gui_rm_portproton () { - if yad_question "$(gettext "Do you really want to remove PortProton?")" ; then + if yad_question "${translations[Do you really want to remove PortProton?]}" ; then rm -fr "${PORT_WINE_PATH}" rm -fr "${PORT_WINE_TMP_PATH}" rm -fr "${HOME}/PortWINE" @@ -5619,11 +5686,11 @@ change_mirror () { if [[ "$MIRROR" == "CLOUD" ]] ; then sed -i 's/="CLOUD"/="GITHUB"/g' "$USER_CONF" pw_notify_send -i info \ - "$(gettext "Mirror changed to:")" "https://github.com/Castro-Fidel" + "${translations[Mirror changed to:]}" "https://github.com/Castro-Fidel" else sed -i 's/="GITHUB"/="CLOUD"/g' "$USER_CONF" pw_notify_send -i info \ - "$(gettext "Mirror changed to:")" "https://cloud.linux-gaming.ru" + "${translations[Mirror changed to:]}" "https://cloud.linux-gaming.ru" fi print_info "Restarting PP for change mirror..." restart_pp --userconf @@ -5632,20 +5699,20 @@ export -f change_mirror change_branch () { if [[ "$BRANCH" == "master" ]] ; then - if yad_question "$(gettext "Do you actually want to change the scripts version to:") DEVEL?" ; then + if yad_question "${translations[Do you actually want to change the scripts version to:]} DEVEL?" ; then sed -i 's/="master"/="devel"/g' "$USER_CONF" export MIRROR="GITHUB" pw_notify_send -i info \ - "$(gettext "Branch changed to:")" "DEVEL" + "${translations[Branch changed to:]}" "DEVEL" unset SKIP_CHECK_UPDATES fi else - if yad_question "$(gettext "Do you actually want to change the scripts version to:") STABLE?" ; then + if yad_question "${translations[Do you actually want to change the scripts version to:]} STABLE?" ; then sed -i 's/="devel"/="master"/g' "$USER_CONF" echo "2024" > "${PORT_WINE_TMP_PATH}/scripts_ver" export PW_CHANGE_BRANCH="1" pw_notify_send -i info \ - "$(gettext "Branch changed to:")" "STABLE" + "${translations[Branch changed to:]}" "STABLE" unset SKIP_CHECK_UPDATES fi fi @@ -5658,11 +5725,11 @@ change_download_grid () { if [[ "$DOWNLOAD_STEAM_GRID" == "1" ]] ; then sed -i 's/DOWNLOAD_STEAM_GRID=.*/DOWNLOAD_STEAM_GRID="0"/' "$USER_CONF" pw_notify_send -i info \ - "$(gettext "Cover downloads are disabled")" + "${translations[Cover downloads are disabled]}" else sed -i 's/DOWNLOAD_STEAM_GRID=.*/DOWNLOAD_STEAM_GRID="1"/' "$USER_CONF" pw_notify_send -i info \ - "$(gettext "Cover downloads are enabled")" + "${translations[Cover downloads are enabled]}" fi print_info "Restarting PP for change cover download behavior..." restart_pp --userconf @@ -5680,11 +5747,11 @@ change_gui_start () { if [[ "$PW_GUI_START" == "NOTEBOOK" ]] ; then sed -i 's/="NOTEBOOK"/="PANED"/g' "$USER_CONF" pw_notify_send -i info \ - "$(gettext "Gui start changed to:")" "PANED" + "${translations[Gui start changed to:]}" "PANED" else sed -i 's/="PANED"/="NOTEBOOK"/g' "$USER_CONF" pw_notify_send -i info \ - "$(gettext "Gui start changed to:")" "NOTEBOOK" + "${translations[Gui start changed to:]}" "NOTEBOOK" fi print_info "Restarting PP for change gui start..." restart_pp --userconf @@ -5698,11 +5765,11 @@ gui_wine_uninstaller () { export -f gui_wine_uninstaller gui_open_user_conf () { - PW_USERCONF_GUI="$("${pw_yad}" --title="$(gettext "EDIT USER CONFIG")" \ + PW_USERCONF_GUI="$("${pw_yad}" --title="${translations[EDIT USER CONFIG]}" \ --text-info --editable --width=800 --height=600 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="$(gettext "BACK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="$(gettext "SAVE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --button="${translations[BACK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="${translations[SAVE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ --filename="${PORT_WINE_PATH}/data/user.conf" 2>/dev/null)" YAD_STATUS="$?" @@ -5721,11 +5788,11 @@ gui_open_user_conf () { export -f gui_open_user_conf gui_edit_db_file () { - GUI_EDIT_DB_FILE="$("${pw_yad}" --title="$(gettext "EDIT DB")" \ + GUI_EDIT_DB_FILE="$("${pw_yad}" --title="${translations[EDIT DB]}" \ --text-info --editable --width=800 --height=600 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="$(gettext "BACK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="$(gettext "SAVE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --button="${translations[BACK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="${translations[SAVE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ --filename="${PORTWINE_DB_FILE}" 2>/dev/null)" YAD_STATUS="$?" @@ -5764,30 +5831,29 @@ gui_credits () { KEY_CREDITS=$RANDOM DATE=$(date +'%Y') - . "${PORT_WINE_PATH}/data/scripts/thanks" + # shellcheck source=/dev/null + source "${PORT_WINE_PATH}/data/scripts/thanks" "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri --scroll \ - --text-align=center --text="$(eval_gettext "PortProton v. \${install_ver} - scripts v. \${scripts_install_ver}")" --text-info <<< "$(eval_gettext "https://linux-gaming.ru + --text-align=center --text="PortProton v. ${install_ver} +${translations[scripts]} v. ${scripts_install_ver}" --text-info <<< "https://linux-gaming.ru -Copyright © \$DATE Castro-Fidel (linux-gaming.ru) +${translations[Copyright]} © $DATE Castro-Fidel (linux-gaming.ru) -This program comes with absolutely no warranty. -See the License for details. -")" 2>/dev/null & +${translations[This program comes with absolutely no warranty. +See the License for details.]}" 2>/dev/null & "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=2 --scroll \ - --text-info <<< "$(gettext "Author: Casro-Fidel (Mikhail Tergoev) + --text-info <<< "${translations[Author: Casro-Fidel (Mikhail Tergoev) -Developer assistants and testers:") -$(credits_devel) -" 2>/dev/null & +Developer assistants and testers:]} +$(credits_devel)" 2>/dev/null & - "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "$(eval_gettext "MIT License + "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "${translations[MIT License]} -Copyright © \$DATE Castro-Fidel (linux-gaming.ru) +${translations[Copyright]} © $DATE Castro-Fidel (linux-gaming.ru) -Permission is hereby granted, free of charge, to any person obtaining a copy +${translations[Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell @@ -5803,32 +5869,30 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -")" 2>/dev/null & +SOFTWARE.]}" 2>/dev/null & "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=4 \ --text-info --show-uri --scroll \ - <<< "$(gettext "The project was supported: -https://boosty.to/portwine-linux.ru") + <<< "${translations[The project was supported: +https://boosty.to/portwine-linux.ru]} $(credits_boosty) -$(gettext "The list will be updated... -")" 2>/dev/null & +${translations[The list will be updated...]}" 2>/dev/null & "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=5 \ - --text="$(gettext "Do you want to join and help in the development of the project:")" \ + --text="${translations[Do you want to join and help in the development of the project:]}" \ --image-path="$PW_GUI_ICON_PATH" --image="port_proton" \ - --uri-color=red --show-uri --text-info --scroll <<< "$(gettext "Website: http://linux-gaming.ru + --uri-color=red --show-uri --text-info --scroll <<< "${translations[Website: http://linux-gaming.ru Discord: http://discord.gg/yJSEFjF VK: https://vk.com/linuxgamingru ------------------------------------------- Become a paid subscriber: boosty: https://boosty.to/portwine-linux.ru Yandex wallet: 410012267513818 --------------------------------------------")" 2>/dev/null & +-------------------------------------------]}" 2>/dev/null & "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \ - --text-info <<< "$(gettext " Third-party libraries that are used in PortProton + --text-info <<< "${translations[ Third-party libraries that are used in PortProton PortProton is built on the basis of the following free software libraries: @@ -5836,14 +5900,12 @@ WINE-PROTON: https://github.com/ValveSoftware/Proton WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds YAD: https://github.com/v1cont/yad -DGVOODOO2: https://dege.fw.hu/" -)" 2>/dev/null & +DGVOODOO2: https://dege.fw.hu/]}" 2>/dev/null & - "${pw_yad}" --title "$(gettext "ABOUT US")" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + "${pw_yad}" --title "${translations[ABOUT US]}" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --notebook --no-buttons --tab-pos=bottom --expand --width=750 --height=400 \ - --tab="$(gettext "ABOUT PORTPROTON")" --tab="$(gettext "AUTORS")" --tab="$(gettext "LICENSE")" \ - --tab="$(gettext "SPONSORS")" --tab="$(gettext "JOIN")" --tab="$(gettext "THIRD PARTY LIBRARIES")" + --tab="${translations[ABOUT PORTPROTON]}" --tab="${translations[AUTORS]}" --tab="${translations[LICENSE]}" \ + --tab="${translations[SPONSORS]}" --tab="${translations[JOIN]}" --tab="${translations[THIRD PARTY LIBRARIES]}" - echo "Exit from credits" restart_pp } diff --git a/data_from_portwine/scripts/setup.sh b/data_from_portwine/scripts/setup.sh index fd5d3160..28c8e9a8 100755 --- a/data_from_portwine/scripts/setup.sh +++ b/data_from_portwine/scripts/setup.sh @@ -53,9 +53,9 @@ if check_flatpak \ && [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] ; then PORT_WINE_OLD_PATH="$(grep "Exec=" "${HOME}/.local/share/applications/PortProton.desktop" | awk -F'env ' '{print $2}' | awk -F'/data/scripts/' '{print $1}')" if [[ -d "$PORT_WINE_OLD_PATH" ]] \ - && yad_question "$(gettext "PortProton installed by script has been detected. Do you want to transfer all the data from it to the new flatpak version of PortProton?")" + && yad_question "${translations[PortProton installed by script has been detected. Do you want to transfer all the data from it to the new flatpak version of PortProton?]}" then - pw_start_progress_bar_block "$(gettext "Please wait...")" + pw_start_progress_bar_block "${translations[Please wait...]}" try_remove_file "${HOME}/.local/share/applications/PortProton.desktop" try_remove_file "${PORT_WINE_OLD_PATH}"/PortProton.desktop @@ -100,7 +100,7 @@ if check_flatpak \ done fi pw_stop_progress_bar - yad_info "$(gettext "PortProton has been moved to flatpak. You can now remove the old directory:") ${PORT_WINE_OLD_PATH}" + yad_info "${translations[PortProton has been moved to flatpak. You can now remove the old directory:]} ${PORT_WINE_OLD_PATH}" fi fi diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index d1c0faa2..c2392c48 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -71,13 +71,16 @@ if PORT_SCRIPTS_PATH="$(readlink -f "${0%/*}")" ; then else fatal fi -export TEXTDOMAIN="PortProton" -export TEXTDOMAINDIR="${PORT_WINE_PATH}/data/locales" - -if ! command -v gettext &>/dev/null -then - gettext() { echo "$1"; } -fi +# export TEXTDOMAIN="PortProton" +# export TEXTDOMAINDIR="${PORT_WINE_PATH}/data/locales" +# +# if ! command -v gettext &>/dev/null +# then +# gettext() { echo "$1"; } +# fi +# eval_gettext () { +# gettext "$1" | (export PATH `envsubst --variables "$1"`; envsubst "$1") +# } # shellcheck source=/dev/null source "${PORT_SCRIPTS_PATH}/functions_helper" @@ -158,6 +161,25 @@ export pw_yad="${PW_GUI_THEMES_PATH}/gui/yad_gui_pp" change_locale +scripts_install_ver=$(<"${PORT_WINE_TMP_PATH}/scripts_ver") +export scripts_install_ver + +if [[ ! -f "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" ]] ; then + create_translations +fi + +unset translations +# shellcheck source=/dev/null +source "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" + +if [[ "$TRANSLATIONS_VER" != "$scripts_install_ver" ]] ; then + try_remove_dir "${PORT_SCRIPTS_PATH}/translations" + create_translations + unset translations + # shellcheck source=/dev/null + source "${PORT_SCRIPTS_PATH}/translations/$LANGUAGE" +fi + export urlg="https://linux-gaming.ru/portproton/" export url_cloud="https://cloud.linux-gaming.ru/portproton" export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}" @@ -347,16 +369,13 @@ if [[ "${SKIP_CHECK_UPDATES}" != 1 ]] ; then PW_FILESYSTEM=$(stat -f -c %T "${PORT_WINE_PATH}") export PW_FILESYSTEM -else - scripts_install_ver=$(<"${PORT_WINE_TMP_PATH}/scripts_ver") - export scripts_install_ver fi # create lock file if ! check_flatpak ; then if [[ -f "${PW_TMPFS_PATH}/portproton.lock" ]] ; then print_warning "Found lock file: ${PW_TMPFS_PATH}/portproton.lock" - yad_question "$(gettext 'A running PortProton session was detected.\nDo you want to end the previous session?')" || exit 0 + yad_question "${translations[A running PortProton session was detected.\\nDo you want to end the previous session?]}" || exit 0 fi touch "${PW_TMPFS_PATH}/portproton.lock" rm_lock_file () { @@ -424,7 +443,7 @@ EOF if grep "ERROR" "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack_error &>/dev/null ; then try_remove_file "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack_error try_remove_file "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh - yad_error "$(gettext "Unpack has FAILED for prefix:") \"${PW_PREFIX_NAME}\"." + yad_error "${translations[Unpack has FAILED for prefix:]} \"${PW_PREFIX_NAME}\"." exit 1 else try_remove_file "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh @@ -435,7 +454,7 @@ EOF portwine_create_shortcut done < "$PORT_WINE_PATH/data/prefixes/$PW_PREFIX_NAME/.create_shortcut" fi - yad_info "$(gettext "Unpack is DONE for prefix:") \"${PW_PREFIX_NAME}\"." + yad_info "${translations[Unpack is DONE for prefix:]} \"${PW_PREFIX_NAME}\"." exit 0 fi fi @@ -483,7 +502,7 @@ use: [--repair] [--reinstall] [--autoinstall] '--debug' ) clear export PW_DEBUG="set -x" - /usr/bin/env bash -c ${pw_full_command_line[*]} 2>&1 | tee "$PORT_WINE_PATH/scripts-debug.log" & + /usr/bin/env bash -c ${pw_full_command_line[@]} 2>&1 | tee "$PORT_WINE_PATH/scripts-debug.log" & exit 0 ;; '--server-file-access' ) @@ -528,13 +547,13 @@ if [[ -d "${PORT_WINE_PATH}/data/dist/" ]] ; then done fi -SORT_OPENGL="$(gettext 'WineD3D OpenGL (For video cards without Vulkan)')" -SORT_VULKAN="$(gettext 'WineD3D Vulkan (Damavand experimental)')" -SORT_LEGACY="$(gettext 'Legacy DXVK (Vulkan v1.1)')" -SORT_STABLE="$(gettext 'Stable DXVK, VKD3D (Vulkan v1.2)')" -SORT_NEWEST="$(gettext 'Newest DXVK, VKD3D, D8VK (Vulkan v1.3+)')" -SORT_G_NINE="$(gettext 'Gallium Nine (DirectX 9 for MESA)')" -SORT_G_ZINK="$(gettext 'Gallium Zink (OpenGL to Vulkan)')" +SORT_OPENGL="${translations[WineD3D OpenGL (For video cards without Vulkan)]}" +SORT_VULKAN="${translations[WineD3D Vulkan (Damavand experimental)]}" +SORT_LEGACY="${translations[Legacy DXVK (Vulkan v1.1)]}" +SORT_STABLE="${translations[Stable DXVK, VKD3D (Vulkan v1.2)]}" +SORT_NEWEST="${translations[Newest DXVK, VKD3D, D8VK (Vulkan v1.3+)]}" +SORT_G_NINE="${translations[Gallium Nine (DirectX 9 for MESA)]}" +SORT_G_ZINK="${translations[Gallium Zink (OpenGL to Vulkan)]}" case "${PW_VULKAN_USE}" in 0) PW_DEFAULT_VULKAN_USE="$SORT_OPENGL!$SORT_NEWEST!$SORT_STABLE!$SORT_LEGACY!$SORT_G_ZINK!$SORT_G_NINE!$SORT_VULKAN" ;; @@ -548,9 +567,9 @@ esac if [[ -z "${PW_COMMENT_DB}" ]] ; then if [[ -n "${PORTPROTON_NAME}" ]] ; then - PW_COMMENT_DB="$(gettext "Launching") ${PORTPROTON_NAME}" + PW_COMMENT_DB="${translations[Launching]} ${PORTPROTON_NAME}" else - PW_COMMENT_DB="$(gettext "Launching") ${PORTWINE_DB}" + PW_COMMENT_DB="${translations[Launching]} ${PORTWINE_DB}" fi fi @@ -582,9 +601,9 @@ if [[ -f "${portwine_exe}" ]] ; then if [[ "${PW_GUI_DISABLED_CS}" != 1 ]] ; then pw_create_gui_png if ! grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop ; then - PW_SHORTCUT="$(gettext "CREATE SHORTCUT")!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!$(gettext "Create shortcut for select file..."):100" + PW_SHORTCUT="${translations[CREATE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Create shortcut for select file...]}:100" else - PW_SHORTCUT="$(gettext "DELETE SHORTCUT")!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!$(gettext "Delete shortcut for select file..."):98" + PW_SHORTCUT="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Delete shortcut for select file...]}:98" fi export KEY_START="$RANDOM" @@ -600,13 +619,13 @@ if [[ -f "${portwine_exe}" ]] ; then "${pw_yad}" --plug=$KEY_START --tabnum=2 --form --columns="${START_GUI_NOTEBOOK_COLUMNS}" --align-buttons --homogeneous-column \ --gui-type-layout="${START_GUI_TYPE_LAYOUT_NOTEBOOK}" \ - --field=" $(gettext "Base settings")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Edit database file for") ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ - --field=" $(gettext "Settings user.conf")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Settings for user.conf")":"FBTN" '@bash -c "button_click --start 128"' \ - --field=" $(gettext "Open directory")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Open directory with .ppdb file")":"FBTN" '@bash -c "button_click --start open_game_folder"' \ - --field=" vkBasalt"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)")":"FBTN" '@bash -c "button_click --start 120"' \ - --field=" MangoHud"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)")":"FBTN" '@bash -c "button_click --start 122"' \ - --field=" dgVoodoo2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)")":"FBTN" '@bash -c "button_click --start 124"' \ - --field=" GameScope"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable GameScope by default (Wayland micro compositor)")":"FBTN" '@bash -c "button_click --start 126"' \ + --field=" ${translations[Base settings]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Edit database file for]} ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ + --field=" ${translations[Settings user.conf]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Settings for user.conf]}":"FBTN" '@bash -c "button_click --start 128"' \ + --field=" ${translations[Open directory]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open directory with .ppdb file]}":"FBTN" '@bash -c "button_click --start open_game_folder"' \ + --field=" vkBasalt"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]}":"FBTN" '@bash -c "button_click --start 120"' \ + --field=" MangoHud"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)]}":"FBTN" '@bash -c "button_click --start 122"' \ + --field=" dgVoodoo2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)]}":"FBTN" '@bash -c "button_click --start 124"' \ + --field=" GameScope"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable GameScope by default (Wayland micro compositor)]}":"FBTN" '@bash -c "button_click --start 126"' \ 2>/dev/null & if [[ "${PW_YAD_FORM_TAB}" == "1" ]] \ @@ -623,12 +642,12 @@ if [[ -f "${portwine_exe}" ]] ; then --width="${PW_START_SIZE_W}" --tab-pos="${PW_TAB_POSITON}" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" --expand \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --tab="$(gettext "GENERAL")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Main menu")":128 \ + --tab="${translations[GENERAL]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --button="${translations[MAIN MENU]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Main menu]}":128 \ --button="${PW_SHORTCUT}" \ - --button="$(gettext "DEBUG")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Launch with the creation of a .log file at the root PortProton")":102 \ - --button="$(gettext "LAUNCH")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Run file ...")":106 2>/dev/null + --button="${translations[DEBUG]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Launch with the creation of a .log file at the root PortProton]}":102 \ + --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null PW_YAD_SET="$?" export PW_YAD_FORM_TAB="1" @@ -645,13 +664,13 @@ if [[ -f "${portwine_exe}" ]] ; then "${pw_yad}" --plug=$KEY_START --tabnum=2 --form --columns="${START_GUI_PANED_COLUMNS}" \ --gui-type-layout="${START_GUI_TYPE_LAYOUT_PANED}" \ --align-buttons --homogeneous-row --homogeneous-column \ - --field=" $(gettext "Base settings")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Edit database file for") ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ - --field=" $(gettext "Settings user.conf")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Settings for user.conf")":"FBTN" '@bash -c "button_click --start 128"' \ - --field=" $(gettext "Open directory")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Open directory with .ppdb file")":"FBTN" '@bash -c "button_click --start open_game_folder"' \ - --field=" vkBasalt"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)")":"FBTN" '@bash -c "button_click --start 120"' \ - --field=" MangoHud"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)")":"FBTN" '@bash -c "button_click --start 122"' \ - --field=" dgVoodoo2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)")":"FBTN" '@bash -c "button_click --start 124"' \ - --field=" GameScope"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Enable GameScope by default (Wayland micro compositor)")":"FBTN" '@bash -c "button_click --start 126"' \ + --field=" ${translations[Base settings]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Edit database file for]} ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ + --field=" ${translations[Settings user.conf]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Settings for user.conf]}":"FBTN" '@bash -c "button_click --start 128"' \ + --field=" ${translations[Open directory]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open directory with .ppdb file]}":"FBTN" '@bash -c "button_click --start open_game_folder"' \ + --field=" vkBasalt"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]}":"FBTN" '@bash -c "button_click --start 120"' \ + --field=" MangoHud"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)]}":"FBTN" '@bash -c "button_click --start 122"' \ + --field=" dgVoodoo2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)]}":"FBTN" '@bash -c "button_click --start 124"' \ + --field=" GameScope"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable GameScope by default (Wayland micro compositor)]}":"FBTN" '@bash -c "button_click --start 126"' \ 2>/dev/null & "${pw_yad}" --key=$KEY_START --paned \ @@ -659,10 +678,10 @@ if [[ -f "${portwine_exe}" ]] ; then --width="${PW_START_SIZE_W}" --tab-pos="${PW_TAB_POSITON}" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Main menu")":128 \ + --button="${translations[MAIN MENU]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Main menu]}":128 \ --button="${PW_SHORTCUT}" \ - --button="$(gettext "DEBUG")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Launch with the creation of a .log file at the root PortProton")":102 \ - --button="$(gettext "LAUNCH")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Run file ...")":106 2>/dev/null + --button="${translations[DEBUG]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Launch with the creation of a .log file at the root PortProton]}":102 \ + --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null PW_YAD_SET="$?" fi [[ -n "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in @@ -697,7 +716,7 @@ else export KEY="$RANDOM" IFS=$'\n' - PW_GENERATE_BUTTONS="--field= $(gettext "Create shortcut...")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click --normal pw_find_exe\"%" + PW_GENERATE_BUTTONS="--field= ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click --normal pw_find_exe\"%" for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do if check_flatpak ; then PW_NAME_D_ICON="$(grep Exec "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F'=' '{print $2}' | @@ -725,15 +744,15 @@ else "${pw_yad}" --plug=$KEY --tabnum="${PW_GUI_SORT_TABS[3]}" --form --columns=3 --align-buttons --separator=";" --homogeneous-column \ --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \ - --field=" $(gettext "Reinstall PortProton")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_pw_reinstall_pp"' \ - --field=" $(gettext "Remove PortProton")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_rm_portproton"' \ - --field=" $(gettext "Update PortProton")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_pw_update"' \ - --field=" $(gettext "Changelog")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal open_changelog"' \ - --field=" $(gettext "Change language")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal change_loc"' \ - --field=" $(gettext "Settings user.conf")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal 128"' \ - --field=" $(gettext "Scripts from backup")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_open_scripts_from_backup"' \ + --field=" ${translations[Reinstall PortProton]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_pw_reinstall_pp"' \ + --field=" ${translations[Remove PortProton]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_rm_portproton"' \ + --field=" ${translations[Update PortProton]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_pw_update"' \ + --field=" ${translations[Changelog]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal open_changelog"' \ + --field=" ${translations[Change language]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal change_loc"' \ + --field=" ${translations[Settings user.conf]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal 128"' \ + --field=" ${translations[Scripts from backup]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_open_scripts_from_backup"' \ --field=" Xterm"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal pw_start_cont_xterm"' \ - --field=" $(gettext "Credits")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_credits"' \ + --field=" ${translations[Credits]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_credits"' \ 2>/dev/null & "${pw_yad}" --plug=$KEY --tabnum="${PW_GUI_SORT_TABS[2]}" --form --columns=3 --align-buttons --separator=";" \ @@ -741,32 +760,32 @@ else --field=" 3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \ --field=" PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \ --field=" WINE : :CB" "$(combobox_fix "${PW_WINE_USE}" "${PW_DEFAULT_WINE_USE}")" \ - --field="$(gettext "Create prefix backup")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"CFBTN" '@bash -c "button_click --normal pw_create_prefix_backup"' \ - --field=" Winetricks"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Run winetricks to install additional libraries to the selected prefix")":"FBTN" '@bash -c "button_click --normal WINETRICKS"' \ - --field=" $(gettext "Clear prefix")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Clear the prefix to fix problems")":"FBTN" '@bash -c "button_click --normal gui_clear_pfx"' \ - --field=" $(gettext "Get other Wine")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Open the menu to download other versions of WINE or PROTON")":"FBTN" '@bash -c "button_click --normal gui_proton_downloader"' \ - --field=" $(gettext "Uninstaller")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Run the program uninstaller built into wine")":"FBTN" '@bash -c "button_click --normal gui_wine_uninstaller"' \ - --field=" $(gettext "Prefix Manager") "!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Run winecfg to edit the settings of the selected prefix")":"FBTN" '@bash -c "button_click --normal WINECFG"' \ - --field=" $(gettext "File Manager")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Run wine file manager")":"FBTN" '@bash -c "button_click --normal WINEFILE"' \ - --field=" $(gettext "Command line")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Run wine cmd")":"FBTN" '@bash -c "button_click --normal WINECMD"' \ - --field=" $(gettext "Regedit")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"$(gettext "Run wine regedit")":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null & + --field="${translations[Create prefix backup]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"CFBTN" '@bash -c "button_click --normal pw_create_prefix_backup"' \ + --field=" Winetricks"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run winetricks to install additional libraries to the selected prefix]}":"FBTN" '@bash -c "button_click --normal WINETRICKS"' \ + --field=" ${translations[Clear prefix]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Clear the prefix to fix problems]}":"FBTN" '@bash -c "button_click --normal gui_clear_pfx"' \ + --field=" ${translations[Get other Wine]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Open the menu to download other versions of WINE or PROTON]}":"FBTN" '@bash -c "button_click --normal gui_proton_downloader"' \ + --field=" ${translations[Uninstaller]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run the program uninstaller built into wine]}":"FBTN" '@bash -c "button_click --normal gui_wine_uninstaller"' \ + --field=" ${translations[Prefix Manager]} "!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run winecfg to edit the settings of the selected prefix]}":"FBTN" '@bash -c "button_click --normal WINECFG"' \ + --field=" ${translations[File Manager]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine file manager]}":"FBTN" '@bash -c "button_click --normal WINEFILE"' \ + --field=" ${translations[Command line]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine cmd]}":"FBTN" '@bash -c "button_click --normal WINECMD"' \ + --field=" ${translations[Regedit]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine regedit]}":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null & "${pw_yad}" --plug=$KEY --tabnum="${PW_GUI_SORT_TABS[1]}" --form --columns="$MAIN_GUI_COLUMNS" --align-buttons --scroll --homogeneous-column \ --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \ - --field=" Dolphin 5.0"!"$PW_GUI_ICON_PATH/dolphin.png"!"$(gettext "Emulator for Nintendo game consoles with high compatibility")":"FBTN" '@bash -c "button_click --normal PW_DOLPHIN"' \ - --field=" MAME"!"$PW_GUI_ICON_PATH/mame.png"!"$(gettext "Multi-arcade emulator that allows you to play old arcade games")":"FBTN" '@bash -c "button_click --normal PW_MAME"' \ - --field=" RetroArch"!"$PW_GUI_ICON_PATH/retroarch.png"!"$(gettext "Multi-platform frontend for emulators with extensive settings")":"FBTN" '@bash -c "button_click --normal PW_RETROARCH"' \ - --field=" PPSSPP Windows"!"$PW_GUI_ICON_PATH/ppsspp.png"!"$(gettext "Emulator for the PlayStation Portable (PSP) game console")":"FBTN" '@bash -c "button_click --normal PW_PPSSPP"' \ - --field=" Citra"!"$PW_GUI_ICON_PATH/citra.png"!"$(gettext "Emulator for the Nintendo 3DS game console")":"FBTN" '@bash -c "button_click --normal PW_CITRA"' \ - --field=" Cemu"!"$PW_GUI_ICON_PATH/cemu.png"!"$(gettext "Emulator for the Wii U game console")":"FBTN" '@bash -c "button_click --normal PW_CEMU"' \ - --field=" ePSXe"!"$PW_GUI_ICON_PATH/epsxe.png"!"$(gettext "Emulator for the PlayStation 1 game console with high compatibility")":"FBTN" '@bash -c "button_click --normal PW_EPSXE"' \ - --field=" Project64"!"$PW_GUI_ICON_PATH/project64.png"!"$(gettext "Emulator for the Nintendo 64 game console")":"FBTN" '@bash -c "button_click --normal PW_PROJECT64"' \ - --field=" VBA-M"!"$PW_GUI_ICON_PATH/vba-m.png"!"$(gettext "Emulator for the Game Boy Advance game console")":"FBTN" '@bash -c "button_click --normal PW_VBA-M"' \ - --field=" Yabause"!"$PW_GUI_ICON_PATH/yabause.png"!"$(gettext "Emulator for the Sega Saturn game console")":"FBTN" '@bash -c "button_click --normal PW_YABAUSE"' \ - --field=" Xenia"!"$PW_GUI_ICON_PATH/xenia.png"!"$(gettext "Emulator for the Xbox 360 game console")":"FBTN" '@bash -c "button_click --normal PW_XENIA"' \ - --field=" FCEUX"!"$PW_GUI_ICON_PATH/fceux.png"!"$(gettext "Emulator for the Nintendo Entertainment System (NES or Dendy) game console")":"FBTN" '@bash -c "button_click --normal PW_FCEUX"' \ - --field=" xemu"!"$PW_GUI_ICON_PATH/xemu.png"!"$(gettext "Emulator for the Xbox game console")":"FBTN" '@bash -c "button_click --normal PW_XEMU"' \ - --field=" Demul"!"$PW_GUI_ICON_PATH/demul.png"!"$(gettext "Emulator for the Sega Dreamcast game console")":"FBTN" '@bash -c "button_click --normal PW_DEMUL"' 2>/dev/null & + --field=" Dolphin 5.0"!"$PW_GUI_ICON_PATH/dolphin.png"!"${translations[Emulator for Nintendo game consoles with high compatibility]}":"FBTN" '@bash -c "button_click --normal PW_DOLPHIN"' \ + --field=" MAME"!"$PW_GUI_ICON_PATH/mame.png"!"${translations[Multi-arcade emulator that allows you to play old arcade games]}":"FBTN" '@bash -c "button_click --normal PW_MAME"' \ + --field=" RetroArch"!"$PW_GUI_ICON_PATH/retroarch.png"!"${translations[Multi-platform frontend for emulators with extensive settings]}":"FBTN" '@bash -c "button_click --normal PW_RETROARCH"' \ + --field=" PPSSPP Windows"!"$PW_GUI_ICON_PATH/ppsspp.png"!"${translations[Emulator for the PlayStation Portable (PSP) game console]}":"FBTN" '@bash -c "button_click --normal PW_PPSSPP"' \ + --field=" Citra"!"$PW_GUI_ICON_PATH/citra.png"!"${translations[Emulator for the Nintendo 3DS game console]}":"FBTN" '@bash -c "button_click --normal PW_CITRA"' \ + --field=" Cemu"!"$PW_GUI_ICON_PATH/cemu.png"!"${translations[Emulator for the Wii U game console]}":"FBTN" '@bash -c "button_click --normal PW_CEMU"' \ + --field=" ePSXe"!"$PW_GUI_ICON_PATH/epsxe.png"!"${translations[Emulator for the PlayStation 1 game console with high compatibility]}":"FBTN" '@bash -c "button_click --normal PW_EPSXE"' \ + --field=" Project64"!"$PW_GUI_ICON_PATH/project64.png"!"${translations[Emulator for the Nintendo 64 game console]}":"FBTN" '@bash -c "button_click --normal PW_PROJECT64"' \ + --field=" VBA-M"!"$PW_GUI_ICON_PATH/vba-m.png"!"${translations[Emulator for the Game Boy Advance game console]}":"FBTN" '@bash -c "button_click --normal PW_VBA-M"' \ + --field=" Yabause"!"$PW_GUI_ICON_PATH/yabause.png"!"${translations[Emulator for the Sega Saturn game console]}":"FBTN" '@bash -c "button_click --normal PW_YABAUSE"' \ + --field=" Xenia"!"$PW_GUI_ICON_PATH/xenia.png"!"${translations[Emulator for the Xbox 360 game console]}":"FBTN" '@bash -c "button_click --normal PW_XENIA"' \ + --field=" FCEUX"!"$PW_GUI_ICON_PATH/fceux.png"!"${translations[Emulator for the Nintendo Entertainment System (NES or Dendy) game console]}":"FBTN" '@bash -c "button_click --normal PW_FCEUX"' \ + --field=" xemu"!"$PW_GUI_ICON_PATH/xemu.png"!"${translations[Emulator for the Xbox game console]}":"FBTN" '@bash -c "button_click --normal PW_XEMU"' \ + --field=" Demul"!"$PW_GUI_ICON_PATH/demul.png"!"${translations[Emulator for the Sega Dreamcast game console]}":"FBTN" '@bash -c "button_click --normal PW_DEMUL"' 2>/dev/null & "${pw_yad}" --plug=$KEY --tabnum="${PW_GUI_SORT_TABS[0]}" --form --columns="$MAIN_GUI_COLUMNS" --align-buttons --scroll --homogeneous-column \ --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \ @@ -825,11 +844,11 @@ else --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --tab-pos="bottom" \ - --tab="$(gettext "AUTOINSTALLS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "EMULATORS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "WINE SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "PORTPROTON SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "INSTALLED")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null + --tab="${translations[AUTOINSTALLS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[EMULATORS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[WINE SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[PORTPROTON SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[INSTALLED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null YAD_STATUS="$?" else "${pw_yad}" --key=$KEY --notebook --expand \ @@ -838,11 +857,11 @@ else --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --tab-pos="bottom" \ - --tab="$(gettext "INSTALLED")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "AUTOINSTALLS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "EMULATORS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "WINE SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="$(gettext "PORTPROTON SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null + --tab="${translations[INSTALLED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[AUTOINSTALLS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[EMULATORS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[WINE SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ + --tab="${translations[PORTPROTON SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null YAD_STATUS="$?" fi