Commit 72bfce45 authored by Roman Alifanov's avatar Roman Alifanov

added multilingual support

parent 70347a16
...@@ -10,8 +10,9 @@ version := $(PKGVER)-$(PKGREL) ...@@ -10,8 +10,9 @@ version := $(PKGVER)-$(PKGREL)
PREFIX=/usr PREFIX=/usr
DATADIR=$(PREFIX)/share DATADIR=$(PREFIX)/share
LOCALEDIR=$(DATADIR)/locale
install: install_common install: install_common install_locale
install_common: install_common:
mkdir -p $(DESTDIR)$(PREFIX)/bin mkdir -p $(DESTDIR)$(PREFIX)/bin
...@@ -20,3 +21,9 @@ install_common: ...@@ -20,3 +21,9 @@ install_common:
install -p -Dm 0644 epmgpi.desktop $(DESTDIR)$(DATADIR)/applications/epmgpi.desktop install -p -Dm 0644 epmgpi.desktop $(DESTDIR)$(DATADIR)/applications/epmgpi.desktop
install -p -Dm 0644 epmgpi.svg $(DESTDIR)$(DATADIR)/pixmaps/epmgpi.svg install -p -Dm 0644 epmgpi.svg $(DESTDIR)$(DATADIR)/pixmaps/epmgpi.svg
install_locale:
@for lang in $(shell cat po/LINGUAS); do \
mkdir -p $(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES; \
msgfmt -o $(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES/epmgpi.mo po/$$lang.po; \
done
#!/bin/bash #!/bin/bash
export TEXTDOMAIN=epmgpi
export TEXTDOMAINDIR=/usr/share/locale
gtxt() {
gettext "$@"
}
if [ $(id -u) -eq 0 ]; then if [ $(id -u) -eq 0 ]; then
echo "Нельзя запускать epmgpi от пользователя root." gtxt "epmgpi cannot be run as root user."
exit 1 exit 1
fi fi
# Временные файлы # Temporary files
clean_up_tmp() { clean_up_tmp() {
rm -fr "$EPMGPI_TMP" rm -fr "$EPMGPI_TMP"
} }
EPMGPI_TMP=$(mktemp -d -t epmgpi.XXXXXXX) EPMGPI_TMP=$(mktemp -d -t epmgpi.XXXXXXX)
# shellcheck disable=SC2064
trap "clean_up_tmp $EPMGPI_TMP" EXIT trap "clean_up_tmp $EPMGPI_TMP" EXIT
EPMGPI_LOG_FILE="$EPMGPI_TMP/epmgpi.log" EPMGPI_LOG_FILE="$EPMGPI_TMP/epmgpi.log"
# Дефолтные параметры yad # Default yad parameters
YAD_DEFAULT="/usr/bin/yad --window-icon=epmgpi --title=epmgpi --class=epmgpi" YAD_DEFAULT="/usr/bin/yad --window-icon=epmgpi --title=epmgpi --class=epmgpi"
VALID_FILE_EXTENSIONS=( VALID_FILE_EXTENSIONS=(
...@@ -24,22 +29,21 @@ VALID_FILE_EXTENSIONS=( ...@@ -24,22 +29,21 @@ VALID_FILE_EXTENSIONS=(
"*.appimage" "*.AppImage" "*.Appimage" "*.appimage" "*.AppImage" "*.Appimage"
) )
# Уведомления # Notifications
ntf() { ntf() {
notify-send --icon=epmgpi "$1" notify-send --icon=epmgpi "$1"
} }
# Уведомление об ошибке # Error notification
ntf_error() { ntf_error() {
notify-send --icon=error "$1" notify-send --icon=error "$1"
} }
# Функция для вопроса пользователю, перепаковать ли пакет # Function to ask the user if the package should be repacked
repackq() { repackq() {
# Не rpm файлы перепаковываются и без ключа --repack # Non-rpm files are repacked without --repack key
if [[ $PKG_PATH == *.rpm ]]; then if [[ $PKG_PATH == *.rpm ]]; then
$YAD_DEFAULT --image="dialog-question" --text="$(gtxt "Do you want to repack the rpm file to override dependencies?")" \
$YAD_DEFAULT --image="dialog-question" --text "Перепаковать ли rpm файл для переопределения зависимостей?" \
--button="yad-yes:0" \ --button="yad-yes:0" \
--button="yad-no:1" --button="yad-no:1"
...@@ -56,13 +60,13 @@ repackq() { ...@@ -56,13 +60,13 @@ repackq() {
echo "$EEPM_ARGS" echo "$EEPM_ARGS"
} }
# GUI селектор пакетов # GUI package selector
pkgselection() { pkgselection() {
$YAD_DEFAULT --file --file-filter="${VALID_FILE_EXTENSIONS[*]}" $YAD_DEFAULT --file --file-filter="${VALID_FILE_EXTENSIONS[*]}"
} }
yad_log_view() { yad_log_view() {
$YAD_DEFAULT --title="Лог ошибки" --no-buttons --text-align=center \ $YAD_DEFAULT --title="$(gtxt "Error Log")" --no-buttons --text-align=center \
--text-info --show-uri --wrap --width=1200 --height=550 --uri-color=red \ --text-info --show-uri --wrap --width=1200 --height=550 --uri-color=red \
--filename="$EPMGPI_LOG_FILE" --filename="$EPMGPI_LOG_FILE"
rm "$EPMGPI_LOG_FILE" rm "$EPMGPI_LOG_FILE"
...@@ -73,7 +77,7 @@ epmgpi_logging() { ...@@ -73,7 +77,7 @@ epmgpi_logging() {
tee -a "$EPMGPI_LOG_FILE" tee -a "$EPMGPI_LOG_FILE"
} }
# Проверка, пакет ли файл # Check if the file is a package
hack_for_paths_with_spaces() { hack_for_paths_with_spaces() {
PKG_PATH="$1" PKG_PATH="$1"
local PKG_NAME local PKG_NAME
...@@ -83,70 +87,75 @@ hack_for_paths_with_spaces() { ...@@ -83,70 +87,75 @@ hack_for_paths_with_spaces() {
echo "$PKG_SYMB_LINK_PATH" echo "$PKG_SYMB_LINK_PATH"
} }
# Установка пакета # Install package
installpkg() { installpkg() {
local PKG_PATH="$1" local PKG_PATH="$1"
local EEPM_ARGS="$2" local EEPM_ARGS="$2"
# Pkexec для выполнения от рута # Pkexec for executing as root
# Тут есть костыль, который каждую строку с помощью sed делает с решеткой. YAD воспринимает только так. (
(
# shellcheck disable=SC2086
/usr/bin/pkexec /usr/bin/epm $EEPM_ARGS "$PKG_PATH" 2>&1 /usr/bin/pkexec /usr/bin/epm $EEPM_ARGS "$PKG_PATH" 2>&1
exit_code=$? exit_code=$?
case $exit_code in case $exit_code in
0) 0)
echo "Команда завершилась успешно" gtxt "Command completed successfully"
ntf "Пакет установлен!" echo
ntf "$(gtxt "Package installed!")"
exit 0 exit 0
;; ;;
100) 100)
ntf_error "Пакет не установлен. Команда завершилась с ошибкой." ntf_error "$(gtxt "Package not installed. Command failed.")"
echo "!!! ОШИБКА EPMGPI" >> "$EPMGPI_LOG_FILE" echo "!!! EPMGPI ERROR" >> "$EPMGPI_LOG_FILE"
;; ;;
126) 126)
ntf_error "Пакет не установлен. Действие прервано пользователем." ntf_error "$(gtxt "Package not installed. Action canceled by the user.")"
exit 1 exit 1
;; ;;
*) *)
ntf_error "Пакет не установлен." ntf_error "$(gtxt "Package not installed.")"
echo "!!! ОШИБКА EPMGPI" >> "$EPMGPI_LOG_FILE" echo "!!! EPMGPI ERROR" >> "$EPMGPI_LOG_FILE"
;; ;;
esac esac
) | epmgpi_logging | sed -u 's/^/# /' | $YAD_DEFAULT \ ) | epmgpi_logging | sed -u 's/^/# /' | $YAD_DEFAULT \
--title="Установка пакета" \ --title="$(gtxt "Package Installation")" \
--progress --width=800 --height=500 \ --progress --width=800 --height=500 \
--enable-log="Лог" --log-expanded --log-on-top \ --enable-log="$(gtxt "Log")" --log-expanded --log-on-top \
--auto-kill --auto-close --auto-kill --auto-close
} }
show_help() { show_help() {
echo "Использование: $0 [опция] [путь-к-пакету]" gtxt "Usage: epmgpi [option] [path-to-package]"
echo "Опции:" echo
echo " --help, -h Показать эту справку" gtxt "Options:"
echo " --version, -v Показать информацию о версии" echo
echo "Передайте путь к пакету, если не хотите использовать окно выбора файла." gtxt " --help, -h Show this help"
echo
gtxt " --version, -v Show version information"
echo
gtxt "Pass the path to the package if you don't want to use the file selection dialog."
echo
} }
main() { main() {
local PKG_PATH local PKG_PATH
local FILE_PATH local FILE_PATH
FILE_PATH="$1" FILE_PATH="$1"
# Проверка и вызов окна выбора файлов, если PKG_PATH не установлен # Check and call file selection dialog if PKG_PATH is not set
if [[ -z "$FILE_PATH" ]]; then if [[ -z "$FILE_PATH" ]]; then
echo "Путь к пакету не указан. Вызов функции выбора пакета..." gtxt "Package path not specified. Calling package selection function..."
FILE_PATH=$(pkgselection) FILE_PATH=$(pkgselection)
fi fi
if [ ! -f "$FILE_PATH" ]; then if [ ! -f "$FILE_PATH" ]; then
echo "Ошибка: $FILE_PATH - это не файл." printf "$(gtxt "Error: %s is not a file.")\n" "$FILE_PATH"
exit 1 exit 1
fi fi
if echo "$FILE_PATH" | grep -q " "; then if echo "$FILE_PATH" | grep -q " "; then
echo "Путь к пакету содержит пробелы" gtxt "Package path contains spaces"
echo
PKG_PATH=$(hack_for_paths_with_spaces "$FILE_PATH") PKG_PATH=$(hack_for_paths_with_spaces "$FILE_PATH")
else else
PKG_PATH=$FILE_PATH PKG_PATH=$FILE_PATH
...@@ -154,7 +163,7 @@ main() { ...@@ -154,7 +163,7 @@ main() {
installpkg "$PKG_PATH" "$(repackq)" installpkg "$PKG_PATH" "$(repackq)"
if grep -q "!!! ОШИБКА EPMGPI" "$EPMGPI_LOG_FILE" ; then if grep -q "!!! EPMGPI ERROR" "$EPMGPI_LOG_FILE" ; then
yad_log_view yad_log_view
fi fi
} }
...@@ -162,7 +171,6 @@ main() { ...@@ -162,7 +171,6 @@ main() {
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
main | epmgpi_logging main | epmgpi_logging
else else
# Обработка аргументов
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
--help|-h) --help|-h)
...@@ -170,14 +178,15 @@ else ...@@ -170,14 +178,15 @@ else
exit 0 exit 0
;; ;;
--version|-v) --version|-v)
echo "Версия 1.4" gtxt "Version:"
echo " 1.5"
exit 0 exit 0
;; ;;
*) *)
echo "Переданы аргументы: $1" printf "$(gtxt "Arguments passed: %s")\n" "$1"
main "$(realpath "$1")" | epmgpi_logging main "$(realpath "$1")" | epmgpi_logging
shift shift
;; ;;
esac esac
done done
fi fi
\ No newline at end of file
...@@ -23,8 +23,9 @@ EPM GUI Package Installer was created to install packages ...@@ -23,8 +23,9 @@ EPM GUI Package Installer was created to install packages
%install %install
%makeinstall_std %makeinstall_std
%find_lang %name
%files %files -f %name.lang
%doc LICENSE %doc LICENSE
%_bindir/epmgpi %_bindir/epmgpi
%_desktopdir/epmgpi.desktop %_desktopdir/epmgpi.desktop
......
ru
\ No newline at end of file
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Language: ru\n"
msgid "epmgpi cannot be run as root user."
msgstr ""
msgid "Do you want to repack the rpm file to override dependencies?"
msgstr ""
msgid "Command completed successfully"
msgstr ""
msgid "Package installed!"
msgstr ""
msgid "Package not installed. Command failed."
msgstr ""
msgid "Package not installed. Action canceled by the user."
msgstr ""
msgid "Package not installed."
msgstr ""
msgid "Package Installation"
msgstr ""
msgid "Error Log"
msgstr ""
msgid "Log"
msgstr ""
msgid "Version:"
msgstr "Версия:"
msgid "Usage: epmgpi [option] [path-to-package]"
msgstr ""
msgid "Options:"
msgstr ""
msgid " --help, -h Show this help"
msgstr ""
msgid " --version, -v Show version information"
msgstr ""
msgid "Pass the path to the package if you don't want to use the file selection dialog."
msgstr ""
msgid "Package path not specified. Calling package selection function..."
msgstr ""
msgid "Error: %s is not a file."
msgstr ""
msgid "Package path contains spaces"
msgstr ""
msgid "Arguments passed: %s"
msgstr ""
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Language: ru\n"
msgid "epmgpi cannot be run as root user."
msgstr "Нельзя запускать epmgpi от пользователя root."
msgid "Do you want to repack the rpm file to override dependencies?"
msgstr "Перепаковать ли rpm файл для переопределения зависимостей?"
msgid "Command completed successfully"
msgstr "Команда завершилась успешно"
msgid "Package installed!"
msgstr "Пакет установлен!"
msgid "Package not installed. Command failed."
msgstr "Пакет не установлен. Команда завершилась с ошибкой."
msgid "Package not installed. Action canceled by the user."
msgstr "Пакет не установлен. Действие прервано пользователем."
msgid "Package not installed."
msgstr "Пакет не установлен."
msgid "Package Installation"
msgstr "Установка пакета"
msgid "Error Log"
msgstr "Лог ошибки"
msgid "Log"
msgstr "Лог"
msgid "Version:"
msgstr "Версия:"
msgid "Usage: epmgpi [option] [path-to-package]"
msgstr "Использование: epmgpi [опция] [путь-к-пакету]"
msgid "Options:"
msgstr "Опции:"
msgid " --help, -h Show this help"
msgstr " --help, -h Показать эту справку"
msgid " --version, -v Show version information"
msgstr " --version, -v Показать информацию о версии"
msgid "Pass the path to the package if you don't want to use the file selection dialog."
msgstr "Передайте путь к пакету, если не хотите использовать окно выбора файла."
msgid "Package path not specified. Calling package selection function..."
msgstr "Путь к пакету не указан. Вызов функции выбора пакета..."
msgid "Error: %s is not a file."
msgstr "Ошибка: %s - это не файл."
msgid "Package path contains spaces"
msgstr "Путь к пакету содержит пробелы"
msgid "Arguments passed: %s"
msgstr "Переданы аргументы: %s"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment