diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 4bb1d364..ffe67212 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -167,200 +167,6 @@ stop_activity_simulation() {
fi
}
-change_locale () {
- if [[ -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] ; then
- LANGUAGE=$(<"${PORT_WINE_TMP_PATH}/PortProton_loc")
-
- # TODO: drop legacy check language after 01.01.2025
- if [[ "$LANGUAGE" == "RUS" ]] ; then
- LANGUAGE="ru"
- echo "ru" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
- elif [[ "$LANGUAGE" == "ENG" ]] ; then
- LANGUAGE="en"
- echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
- fi
- fi
-
- local GAME_LANGUAGE="$LANGUAGE"
-
- if check_gamescope_session ; then
- LANGUAGE="en"
- else
- [[ ! -f "${pw_yad}" ]] && pw_yad="yad"
- if [[ -z "$LANGUAGE" ]] \
- || [[ "${PW_FORCE_CHANGE_LOC}" == "1" ]] ; then
- SET_LANG=(
- "${pw_yad}" --list
- --window-icon="$PW_GUI_ICON_PATH/portproton.svg"
- --title="Select language for PortProton"
- --column="Language" --column=""
- --width=400 --height=200
-
- "Russian (Русский)" ru
- "English" en
- "Spanish (Español・Española)" es
- )
-
- out=$("${SET_LANG[@]}")
- if [[ -z $out ]] \
- && [[ -n "$LANGUAGE" ]] ; then
- echo "${LANGUAGE}" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
- elif [[ -z $out ]] ; then
- echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
- else
- LANGUAGE=$(echo "$out" | cut -d '|' -f2)
- echo "${LANGUAGE}" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
- create_translations
- fi
- unset PW_FORCE_CHANGE_LOC
- restart_pp
- fi
- fi
- export LANGUAGE
-
- case "$GAME_LANGUAGE" in
- ru)
- check_start_from_steam && export LC_ALL=ru_RU.UTF-8
- export FULL_LN="russian"
- export LANGUAGE_GIF="ru"
- ;;
- es)
- check_start_from_steam && export LC_ALL=es_ES.UTF-8
- export FULL_LN="spanish"
- export LANGUAGE_GIF="en"
- ;;
- *)
- export FULL_LN="english"
- export LANGUAGE_GIF="en"
- export LANGUAGE="en"
- ;;
- esac
-
-}
-export -f change_locale
-
-generate_pot () {
- local FILES_FOR_GETTEXT i
- FILES_FOR_GETTEXT=(functions_helper start.sh setup.sh add_in_steam.sh)
- for i in "${FILES_FOR_GETTEXT[@]}" ; do
- sed -e 's/{translations\[/(gettext \"/g' -e 's/]}/")/g' "${PORT_SCRIPTS_PATH}/$i" > "${PORT_SCRIPTS_PATH}/${i}_tmp"
- sed -i '/\[\$/d' "${PORT_SCRIPTS_PATH}/${i}_tmp"
- done
- #Когда присходит предупреждение: синтаксис $"..." запрещен по соображениям безопасности; используйте eval_gettext
- #и ругается на строку в которой нет перевода, можно использовать sed -i '//d' и убрать эту строку
- #либо отредактировать сам код, чтобы не было такой ошибки (к примеру вместо двойных ковычек использовать в таком месте одинарные)
- 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"
- 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_tmp" \
- "data/scripts/setup.sh_tmp" \
- "data/scripts/functions_helper_tmp" \
- "data/scripts/add_in_steam.sh_tmp" \
- -o "$TEMPLATE_POT"
- popd 1>/dev/null || fatal
- if [[ -f "$LANG_PO" ]] ; then
- echo "update $LANG_PO file"
- msgmerge --update "$LANG_PO" "$TEMPLATE_POT"
- else
- echo "create $LANG_PO file"
- msginit --input="$TEMPLATE_POT" --locale="${lang}" --output="$LANG_PO"
- fi
- #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_file "${PORT_SCRIPTS_PATH}/add_in_steam.sh_tmp"
- try_remove_dir "${PW_CACHE_LANG_PATH}"
-}
-export -f generate_pot
-
-create_translations () {
- local po_file msgid msgstr
- [[ ! -d $PW_CACHE_LANG_PATH ]] && create_new_dir "$PW_CACHE_LANG_PATH"
- cat << EOF > "${PW_CACHE_LANG_PATH}/$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/PortProton.pot"
- else
- po_file="${PORT_WINE_PATH}/data/locales/$LANGUAGE/LC_MESSAGES/PortProton.po"
- fi
-
- while read -r line ; do
- 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
- if [[ $msgid == "msgid \"\"" ]] ; then
- continue
- fi
- msgstr="$msgid"
- else
- unset msgstr
- msgstr="$line"
- read -r line
- while [[ ! $line =~ msgid ]] ; do
- msgstr+=$line
- read -r line
- if [[ -z $line ]] ; then
- break
- fi
- done
- fi
- fi
- if [[ $LANGUAGE != "en" ]] ; then
- msgstr=${msgstr//"msgstr "/}
- msgid=${msgid//"msgid "/}
- fi
- msgstr=${msgstr//" "/-_-}
- msgstr=${msgstr//"\n"\"\"/+_+}
- msgstr=${msgstr//\"\"/}
- msgstr=${msgstr//#*/}
- msgstr=${msgstr//"*"/#_#}
- msgid=${msgid//" "/-_-}
- msgid=${msgid//"\n"\"\"/+_+}
- msgid=${msgid//\"\"/}
- msgid=${msgid//#*/}
- msgid=${msgid//"*"/#_#}
- if [[ -n $msgid ]] ; then
- if [[ -z $msgstr ]] ; then
- msgstr="$msgid"
- fi
- if [[ $msgid =~ \$ ]] ; then
- msgid=${msgid//\$/\\$}
- if [[ $msgstr =~ \$% ]] ; then
- msgstr=${msgstr//\$/\\$}
- fi
- fi
- echo \["$msgid"\]="$msgstr" >> "${PW_CACHE_LANG_PATH}/$LANGUAGE"
- fi
- done
- done < "$po_file"
-
- echo ")" >> "${PW_CACHE_LANG_PATH}/$LANGUAGE"
- sed -i 's/+_+/\n/g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
- sed -i 's/#_#/\*/g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
- sed -i 's/-_-/ /g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
- if [[ $LANGUAGE == "en" ]] ; then
- sed -i 's/msgid //g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
- fi
-}
-export -f create_translations
-
try_copy_file () {
if [[ ! -f "$1" ]] ; then print_info "file $1 not found for copy" && return 1
elif [[ -z "$2" ]] ; then print_error "no way to copy file $1" && return 1
@@ -1597,6 +1403,8 @@ pw_reinstall_pp () {
}
check_user_conf () {
+ export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
+
if [[ ! -f "${USER_CONF}" ]] ; then
cat << EOF > "${USER_CONF}"
#!/usr/bin/env bash"
@@ -1604,6 +1412,201 @@ check_user_conf () {
# export DXVK_HUD=full"
# export GALLIUM_HUD=fps"
EOF
+ else
+ sed -i \
+ -e 's/="CDN"/="CLOUD"/g' \
+ -e '/export PW_SOUND_DRIVER_USE=/d' \
+ "$USER_CONF"
+ fi
+
+ # shellcheck source=/dev/null
+ source "$USER_CONF"
+}
+
+
+generate_pot () {
+ local FILES_FOR_GETTEXT i
+ FILES_FOR_GETTEXT=(functions_helper start.sh setup.sh add_in_steam.sh)
+ for i in "${FILES_FOR_GETTEXT[@]}" ; do
+ sed -e 's/{translations\[/(gettext \"/g' -e 's/]}/")/g' "${PORT_SCRIPTS_PATH}/$i" > "${PORT_SCRIPTS_PATH}/${i}_tmp"
+ sed -i '/\[\$/d' "${PORT_SCRIPTS_PATH}/${i}_tmp"
+ done
+ #Когда присходит предупреждение: синтаксис $"..." запрещен по соображениям безопасности; используйте eval_gettext
+ #и ругается на строку в которой нет перевода, можно использовать sed -i '//d' и убрать эту строку
+ #либо отредактировать сам код, чтобы не было такой ошибки (к примеру вместо двойных ковычек использовать в таком месте одинарные)
+ 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"
+ 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_tmp" \
+ "data/scripts/setup.sh_tmp" \
+ "data/scripts/functions_helper_tmp" \
+ "data/scripts/add_in_steam.sh_tmp" \
+ -o "$TEMPLATE_POT"
+ popd 1>/dev/null || fatal
+ if [[ -f "$LANG_PO" ]] ; then
+ echo "update $LANG_PO file"
+ msgmerge --update "$LANG_PO" "$TEMPLATE_POT"
+ else
+ echo "create $LANG_PO file"
+ msginit --input="$TEMPLATE_POT" --locale="${lang}" --output="$LANG_PO"
+ fi
+ #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_file "${PORT_SCRIPTS_PATH}/add_in_steam.sh_tmp"
+ try_remove_dir "${PW_CACHE_LANG_PATH}"
+}
+export -f generate_pot
+
+create_translations () {
+ local po_file msgid msgstr
+ [[ ! -d $PW_CACHE_LANG_PATH ]] && create_new_dir "$PW_CACHE_LANG_PATH"
+ cat << EOF > "${PW_CACHE_LANG_PATH}/$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/PortProton.pot"
+ else
+ po_file="${PORT_WINE_PATH}/data/locales/$LANGUAGE/LC_MESSAGES/PortProton.po"
+ fi
+
+ while read -r line ; do
+ 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
+ if [[ $msgid == "msgid \"\"" ]] ; then
+ continue
+ fi
+ msgstr="$msgid"
+ else
+ unset msgstr
+ msgstr="$line"
+ read -r line
+ while [[ ! $line =~ msgid ]] ; do
+ msgstr+=$line
+ read -r line
+ if [[ -z $line ]] ; then
+ break
+ fi
+ done
+ fi
+ fi
+ if [[ $LANGUAGE != "en" ]] ; then
+ msgstr=${msgstr//"msgstr "/}
+ msgid=${msgid//"msgid "/}
+ fi
+ msgstr=${msgstr//" "/-_-}
+ msgstr=${msgstr//"\n"\"\"/+_+}
+ msgstr=${msgstr//\"\"/}
+ msgstr=${msgstr//#*/}
+ msgstr=${msgstr//"*"/#_#}
+ msgid=${msgid//" "/-_-}
+ msgid=${msgid//"\n"\"\"/+_+}
+ msgid=${msgid//\"\"/}
+ msgid=${msgid//#*/}
+ msgid=${msgid//"*"/#_#}
+ if [[ -n $msgid ]] ; then
+ if [[ -z $msgstr ]] ; then
+ msgstr="$msgid"
+ fi
+ if [[ $msgid =~ \$ ]] ; then
+ msgid=${msgid//\$/\\$}
+ if [[ $msgstr =~ \$% ]] ; then
+ msgstr=${msgstr//\$/\\$}
+ fi
+ fi
+ echo \["$msgid"\]="$msgstr" >> "${PW_CACHE_LANG_PATH}/$LANGUAGE"
+ fi
+ done
+ done < "$po_file"
+
+ echo ")" >> "${PW_CACHE_LANG_PATH}/$LANGUAGE"
+ sed -i 's/+_+/\n/g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
+ sed -i 's/#_#/\*/g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
+ sed -i 's/-_-/ /g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
+ if [[ $LANGUAGE == "en" ]] ; then
+ sed -i 's/msgid //g' "${PW_CACHE_LANG_PATH}/$LANGUAGE"
+ fi
+}
+
+check_translations () {
+ if [[ -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] ; then
+ LANGUAGE=$(<"${PORT_WINE_TMP_PATH}/PortProton_loc")
+ fi
+
+ if check_gamescope_session ; then
+ LANGUAGE="en"
+ else
+ [[ ! -f "${pw_yad}" ]] && pw_yad="yad"
+ if [[ -z "$LANGUAGE" ]] \
+ || [[ "${PW_FORCE_CHANGE_LOC}" == "1" ]] ; then
+ SET_LANG=(
+ "${pw_yad}" --list
+ --window-icon="$PW_GUI_ICON_PATH/portproton.svg"
+ --title="Select language for PortProton"
+ --column="Language" --column=""
+ --width=400 --height=200
+
+ "Russian (Русский)" ru
+ "English" en
+ "Spanish (Español・Española)" es
+ )
+
+ out=$("${SET_LANG[@]}")
+ if [[ -z $out ]] \
+ && [[ -n "$LANGUAGE" ]] ; then
+ echo "${LANGUAGE}" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
+ elif [[ -z $out ]] ; then
+ echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
+ else
+ LANGUAGE=$(echo "$out" | cut -d '|' -f2)
+ echo "${LANGUAGE}" > "${PORT_WINE_TMP_PATH}/PortProton_loc"
+ fi
+ unset PW_FORCE_CHANGE_LOC
+ fi
+ fi
+ export LANGUAGE
+
+ case "$LANGUAGE" in
+ ru)
+ check_start_from_steam && export LC_ALL=ru_RU.UTF-8
+ export FULL_LN="russian"
+ export LANGUAGE_GIF="ru"
+ ;;
+ es)
+ check_start_from_steam && export LC_ALL=es_ES.UTF-8
+ export FULL_LN="spanish"
+ export LANGUAGE_GIF="en"
+ ;;
+ *)
+ export FULL_LN="english"
+ export LANGUAGE_GIF="en"
+ export LANGUAGE="en"
+ ;;
+ esac
+
+ export PW_CACHE_LANG_PATH="${PORT_WINE_TMP_PATH}/cache_lang/"
+ if [[ ! -f "$PW_CACHE_LANG_PATH/$LANGUAGE" ]] ; then
+ create_translations
+ elif [[ $(sed -n '2p' "$PW_CACHE_LANG_PATH/$LANGUAGE") != "TRANSLATIONS_VER=$scripts_install_ver" ]] ; then
+ try_remove_dir "$PW_CACHE_LANG_PATH"
+ create_translations
fi
}
@@ -7892,8 +7895,32 @@ update_ext_ppdb () {
exit 0
fi
else
- yad_error "Not found desktop file for:\n\n${tmp_ppdb_exe[@]}\n"
- exit 1
+ check_user_conf
+ check_translations
+
+ # shellcheck source=/dev/null
+ source "$PW_CACHE_LANG_PATH/$LANGUAGE"
+
+ # shellcheck source=/dev/null
+ source "$PW_GUI_THEMES_PATH/$GUI_THEME.pptheme"
+
+ if yad_question "${translations[No shortcut found to launch]}:\n${tmp_ppdb_exe[@]}\n\n ${translations[Do you want to specify the path to the file manually?]}\n" ; then
+ cd "$HOME"
+ portwine_exe=$("${pw_yad}" --file --width=750 --height=600 \
+ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "EXE FILE" --file-filter="*.exe" 2>/dev/null )
+ YAD_STATUS="$?"
+
+ if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
+ exit 1
+ fi
+ print_info "Moved new $tmp_ppdb_file to ${portwine_exe}.ppdb"
+ mv -f "$tmp_ppdb_file" "${portwine_exe}.ppdb"
+ print_info "Restarting PP after move new ppdb file..."
+ /usr/bin/env bash -c "${PORT_SCRIPTS_PATH}/start.sh $portwine_exe" &
+ exit 0
+ else
+ exit 1
+ fi
fi
else
fatal "ppdb file \"$1\" not found!"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index d5a40c7d..30450ef0 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -53,7 +53,6 @@ else
export PW_TMPFS_PATH="${PORT_WINE_PATH}/data/tmp/PortProton_$USER"
fi
-export PW_CACHE_LANG_PATH="${PORT_WINE_TMP_PATH}/cache_lang/"
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
export PW_GUI_THEMES_PATH="${PORT_WINE_PATH}/data/themes"
@@ -185,43 +184,26 @@ create_new_dir "$STEAM_SCRIPTS"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
export pw_yad="${PW_GUI_THEMES_PATH}/gui/yad_gui_pp"
-change_locale
-
export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
try_remove_dir "${PW_WINELIB}/var"
install_ver="$(<"${PORT_WINE_TMP_PATH}/PortProton_ver")"
export install_ver
if [[ -f "${PORT_WINE_TMP_PATH}/scripts_ver" ]]
then scripts_install_ver="$(<"${PORT_WINE_TMP_PATH}/scripts_ver")"
-else scripts_install_ver="2025"
+else scripts_install_ver="2026"
fi
export scripts_install_ver
export WINETRICKS_DOWNLOADER="curl"
-export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
+
check_user_conf
-sed -i 's/="CDN"/="CLOUD"/g' "$USER_CONF"
-sed -i '/export PW_SOUND_DRIVER_USE=/d' "$USER_CONF"
-
-check_variables PW_LOG "0"
-
-try_remove_file "${PW_TMPFS_PATH}/update_pfx_log"
-
-# shellcheck source=/dev/null
-source "$USER_CONF"
-
-[[ ! -f "$PORT_WINE_TMP_PATH/statistics" ]] && touch "$PORT_WINE_TMP_PATH/statistics"
-[[ ! -f "$PW_CACHE_LANG_PATH/$LANGUAGE" ]] && create_translations
-
-unset translations
+check_translations
# shellcheck source=/dev/null
source "$PW_CACHE_LANG_PATH/$LANGUAGE"
-if [[ $TRANSLATIONS_VER != "$scripts_install_ver" ]] ; then
- try_remove_dir "$PW_CACHE_LANG_PATH"
- create_translations
- # shellcheck source=/dev/null
- source "$PW_CACHE_LANG_PATH/$LANGUAGE"
-fi
+check_variables PW_LOG "0"
+try_remove_file "${PW_TMPFS_PATH}/update_pfx_log"
+
+[[ ! -f "$PORT_WINE_TMP_PATH/statistics" ]] && touch "$PORT_WINE_TMP_PATH/statistics"
if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
steamplay_launch "${@:2}"