#! /bin/sh
#
# 	Part of kde-service-menu-pdf Version 1.0
# 	Copyright (C) 2007-2018 Giuseppe Benigno <giuseppe.benigno(at)gmail.com>
#
# 	This program is free software: you can redistribute it and/or modify
# 	it under the terms of the GNU General Public License as published by
# 	the Free Software Foundation, either version 3 of the License, or
# 	(at your option) any later version.
#
# 	This program is distributed in the hope that it will be useful,
# 	but WITHOUT ANY WARRANTY; without even the implied warranty of
# 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# 	GNU General Public License for more details.
#
# 	You should have received a copy of the GNU General Public License
# 	along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

if [ ${#} -eq 0 ] || [ "${1}" = "-h" ] || [ "${1}" = "--help" ]; then
	echo
	echo "USE:\t\t${0##*/} action files"
	echo
	echo "action:\t\tmerge, add, extract, extract_even, extract_odd, burst, remove, left, right, overturn, restore, repair, watermark, stamp, lock, unlock, attach, unattach, uncompress, compress, info"
	echo "files:\t\tfile1 file2 ..."
	echo
	echo "example:\t${0##*/} repair /home/user/file1.pdf /home/user/file2.pdf"
	echo
	exit 0
fi

action="${1}"
shift

#### languages strings messages #################
# Syntax for strings name is: msg_[$action]_$window_[$section]
# For languages as sr@Latn use srLatn

load_language_de () {
	msg_alert_pdftk_not_found_title="Komponente wurde nicht gefunden"
	msg_alert_pdftk_not_found_text="Die pdftk Software wurde nicht gefunden! Bitte installieren Sie pdftk."

	msg_save_file_title="Datei speichern ..."

	msg_merge_one_file_only="Eine Datei kann nicht verbunden werden. Bitte mindestens zwei Dateien auswählen."
	msg_merge_finish_title="Verbindung der Dokumente \"${base_file_name_list}\""
	msg_merge_finish_ok="Fertig."
	msg_merge_finish_error="Ein Fehler ist aufgetreten."

	msg_add_open_file="Wählen Sie das hinzuzufügende Dokument aus"
	msg_add_finish_title="Dokument zu  \"${base_file_name}\" hinzugefügt."
	msg_add_finish_ok="Fertig."
	msg_add_finish_error="Ein Fehler ist aufgetreten."

	msg_extract_input_pages_range_title="Seiten für den Auszug"
	msg_extract_input_pages_range="Beachte: Das Schlüsselwort \"end\" kann für die letzte Seite benutzt werden, anstatt deren Seitenzahl anzugeben. Um nur eine einzelne Seite heraus zu ziehen einfach die Endnummer weg lassen. Bitte Bereich eingeben, um Seiten aus der Datei \"${base_file_name}\" heraus zu ziehen:"
	msg_extract_save_file_name="${base_file_name} (Auszug).pdf"
	msg_extract_finish_title="Seiten aus Dokument \"${file_name}\" herausgezogen"
	msg_extract_finish_ok="Fertig."
	msg_extract_finish_error="Ein Fehler ist aufgetreten."

	msg_extract_even_save_file_name="${base_file_name} (gerade Seiten).pdf"
	msg_extract_even_finish_title="Alle geraden Seiten von \"${file_name}\" herausziehen"

	msg_extract_odd_save_file_name="${base_file_name} (ungerade Seiten).pdf"
	msg_extract_odd_finish_title="Alle ungeraden Seiten von \"${file_name}\" herausziehen"

	msg_burst_select_dir="Zielverzeichnis auswählen"
	msg_burst_finish_title="Dokument \"${file_name}\" sprengen"
	msg_burst_finish_ok="Done."
	msg_burst_finish_error="Ein Fehler ist aufgetreten."

	msg_remove_input_pages_range_title="Bereich, der entfernt werden soll"
	msg_remove_input_pages_range="Beachte: Das Schlüsselwort \"end\" kann für die letzte Seite benutzt werden, anstatt deren Seitenzahl anzugeben. Um nur eine einzelne Seite heraus zu ziehen einfach die Endnummer weg lassen. Bitte Bereich eingeben, um Seiten aus der Datei \"${base_file_name}\" zu entfernen:"
	msg_remove_remove_all_pages_error="Kann nicht entfernen Sie alle Seiten aus dem Dokument!"
	if [ -z "${range1}" ]; then msg_remove_save_file_name="${base_file_name} (Seiten ${range2}).pdf"
		elif [ -z "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (Seiten ${range1}).pdf"
			elif [ "${range1}" != "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (Seiten ${range1}, ${range2}).pdf"
	fi
	msg_remove_finish_title="Seiten entfernen in Datei \"${base_file_name}\""
	msg_remove_finish_ok="Fertig."
	msg_remove_finish_error="Ein Fehler ist aufgetreten."

	msg_rotate_left_save_file_name="${base_file_name} (links gedreht).pdf"
	msg_rotate_left_finish_title="Links ausrichten von Dokument \"${base_file_name}\""
	msg_rotate_left_finish_ok="Fertig."
	msg_rotate_left_finish_error="Ein Fehler ist aufgetreten."

	msg_rotate_right_save_file_name="${base_file_name} (rechts gedreht).pdf"
	msg_rotate_right_finish_title="Rechts ausrichten von Dokument \"${base_file_name}\""
	msg_rotate_right_finish_ok="Fertig."
	msg_rotate_right_finish_error="Ein Fehler ist aufgetreten."

	msg_rotate_overturn_save_file_name="${base_file_name} (umgedreht).pdf"
	msg_rotate_overturn_finish_title="Dokument \"${base_file_name}\" umdrehen"
	msg_rotate_overturn_finish_ok="Fertig."
	msg_rotate_overturn_finish_error="Ein Fehler ist aufgetreten."

	msg_rotate_original_save_file_name="${base_file_name} (wiederhergestellt).pdf"
	msg_rotate_original_finish_title="Ursprüngliche Ausrichtung von \"${base_file_name}\" wiederherstellen"
	msg_rotate_original_finish_ok="Fertig."
	msg_rotate_original_finish_error="Ein Fehler ist aufgetreten."

	msg_repair_save_file_name="${base_file_name} (repariert).pdf"
	msg_repair_finish_title="Reparieren von \"${base_file_name}\""
	msg_repair_finish_ok="Fertig."
	msg_repair_finish_error="Ein Fehler ist aufgetreten."

	msg_watermark_open_file_title="Datei für das Wasserzeichen öffnen \"${base_file_name}\""
	msg_watermark_save_file_name="${base_file_name} (Wasserzeichen).pdf"
	msg_watermark_finish_title="Wasserzeichen hinzufügen für \"${base_file_name}\""
	msg_watermark_finish_ok="Fertig."
	msg_watermark_finish_error="Ein Fehler ist aufgetreten."

	msg_stamp_open_file_title="Datei zum Stempeln öffnen \"${base_file_name}\""
	msg_stamp_save_file_name="${base_file_name} (gestempelt).pdf"
	msg_stamp_finish_title="Stempeln von \"${base_file_name}\""
	msg_stamp_finish_ok="Fertig."
	msg_stamp_finish_error="Ein Fehler ist aufgetreten."

	msg_lock_save_file_name="${base_file_name} (gesperrt).pdf"
	msg_lock_permissions_title="Berechtigungen auswählen"
	msg_lock_permissions_text="Berechtigungen für Dokument \"${base_file_name}\" auswählen"
	msg_lock_permissions_printing_top="Drucken in hoher Qualität"
	msg_lock_permissions_printing_degraded_printing="Drucken in niedriger Qualität"
	msg_lock_permissions_printing_modify_contents="Ändern"
	msg_lock_permissions_printing_copy_contents="Inhalte kopieren"
	msg_lock_permissions_printing_modify_annotations="Anmerkungen ändern"
	msg_lock_insert_password_title="Passwort eingeben"
	msg_lock_insert_password_own="Das Masterpasswort wird benötigt um Berechtigungen zu setzen. Bitte Masterpasswort für \"${base_file_name}\" festlegen:"
	msg_lock_insert_password_usr="Setzen Sie ein Benutzerpasswort, um das Dokument vor unerlaubtem Lesezugriff zu schützen. Das Masterpasswort und das Benutzerpasswort müssen unterschiedlich sein. Wenn Sie uneingeschränkten Lesezugriff möchten, lassen Sie dieses Passwort leer. Benutzerpasswort für Dokument \"${base_file_name}\" festlegen:"
	msg_lock_finish_title="Sperren von \"${base_file_name}\""
	msg_lock_finish_ok="Fertig."
	msg_lock_finish_error="Ein Fehler ist aufgetreten."

	msg_unlock_insert_password_title="Passwort eingeben"
	msg_unlock_insert_password_own="Bitte Masterpasswort für \"${base_file_name}\" eingeben:"
	msg_unlock_save_file_name="${base_file_name} (entsperrt).pdf"
	msg_unlock_finish_title="Entsperren von \"${base_file_name}\""
	msg_unlock_finish_ok="Fertig."
	msg_unlock_finish_error="Ein Fehler ist aufgetreten."

	msg_attach_open_file_title="Datei zum Anhängen öffnen \"${base_file_name}\""
	msg_attach_save_file_name="${base_file_name} (mit Anhang).pdf"
	msg_attach_finish_title="Datei an Dokument \"${base_file_name}\" anhängen"
	msg_attach_finish_ok="Fertig."
	msg_attach_finish_error="Ein Fehler ist aufgetreten."

	msg_unattach_select_dir="Ordner zum Speichern..."
	msg_unattach_finish_title="Kopieren der angehängten Dateien aus \"${base_file_name}\""
	msg_unattach_finish_ok="Fertig."
	msg_unattach_finish_error="Ein Fehler ist aufgetreten."

	msg_uncompress_save_file_name="${base_file_name} (unkomprimiert).pdf"
	msg_uncompress_finish_title="Dekomprimierung von \"${base_file_name}\""
	msg_uncompress_finish_ok="Fertig."
	msg_uncompress_finish_error="Ein Fehler ist aufgetreten."

	msg_compress_save_file_name="${base_file_name} (komprimiert).pdf"
	msg_compress_finish_title="Komprimierung von \"${base_file_name}\""
	msg_compress_finish_ok="Fertig."
	msg_compress_finish_error="Ein Fehler ist aufgetreten."

	msg_info_title="Informationen"
	msg_file_not_found="Datei nicht gefunden."
}

load_language_en () {
	msg_alert_pdftk_not_found_title="Component not found"
	msg_alert_pdftk_not_found_text="Software pdftk not found! Please, install it."

	msg_save_file_title="Save file ..."

	msg_merge_one_file_only="Can't merge one file only. Please select not less than two files."
	msg_merge_finish_title="Merging documents \"${base_file_name_list}\""
	msg_merge_finish_ok="Done."
	msg_merge_finish_error="An error has occurred."

	msg_add_open_file="Select document to add"
	msg_add_finish_title="Added a document to \"${base_file_name}\""
	msg_add_finish_ok="Done."
	msg_add_finish_error="An error has occurred."

	msg_extract_input_pages_range_title="Extract range"
	msg_extract_input_pages_range="Notes: The keyword \"end\" may be used to reference the final page of a document instead of a page number. Reference a single page by omitting the ending page number. Please input pages range of \"${base_file_name}\" to extract:"
	msg_extract_save_file_name="${base_file_name} (extracted pages).pdf"
	msg_extract_finish_title="Extracted pages from document \"${file_name}\""
	msg_extract_finish_ok="Done."
	msg_extract_finish_error="An error has occurred."

	msg_extract_even_save_file_name="${base_file_name} (even pages).pdf"
	msg_extract_even_finish_title="Extract all even pages from document \"${file_name}\""

	msg_extract_odd_save_file_name="${base_file_name} (odd pages).pdf"
	msg_extract_odd_finish_title="Extract all odd pages from document \"${file_name}\""

	msg_burst_select_dir="Select destination directory"
	msg_burst_finish_title="Burst the document \"${file_name}\""
	msg_burst_finish_ok="Done."
	msg_burst_finish_error="An error has occurred."

	msg_remove_input_pages_range_title="Remove range"
	msg_remove_input_pages_range="Notes: The keyword \"end\" may be used to reference the final page of a document instead of a page number. Reference a single page by omitting the ending page number. Please input pages range of \"${base_file_name}\" to remove:"
	msg_remove_remove_all_pages_error="Can't remove all pages from document!"
	if [ -z "${range1}" ]; then msg_remove_save_file_name="${base_file_name} (pages ${range2}).pdf"
		elif [ -z "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (pages ${range1}).pdf"
			elif [ "${range1}" != "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (pages ${range1}, ${range2}).pdf"
	fi
	msg_remove_finish_title="Removing pages from document \"${base_file_name}\""
	msg_remove_finish_ok="Done."
	msg_remove_finish_error="An error has occurred."

	msg_rotate_left_save_file_name="${base_file_name} (left rotated).pdf"
	msg_rotate_left_finish_title="Left rotation of document \"${base_file_name}\""
	msg_rotate_left_finish_ok="Done."
	msg_rotate_left_finish_error="An error has occurred."

	msg_rotate_right_save_file_name="${base_file_name} (right rotated).pdf"
	msg_rotate_right_finish_title="Right rotation of document \"${base_file_name}\""
	msg_rotate_right_finish_ok="Done."
	msg_rotate_right_finish_error="An error has occurred."

	msg_rotate_overturn_save_file_name="${base_file_name} (overturned).pdf"
	msg_rotate_overturn_finish_title="Overturn document \"${base_file_name}\""
	msg_rotate_overturn_finish_ok="Done."
	msg_rotate_overturn_finish_error="An error has occurred."

	msg_rotate_original_save_file_name="${base_file_name} (restored).pdf"
	msg_rotate_original_finish_title="Restored original orientation of document \"${base_file_name}\""
	msg_rotate_original_finish_ok="Done."
	msg_rotate_original_finish_error="An error has occurred."

	msg_repair_save_file_name="${base_file_name} (repaired).pdf"
	msg_repair_finish_title="Repair the document \"${base_file_name}\""
	msg_repair_finish_ok="Done."
	msg_repair_finish_error="An error has occurred."

	msg_watermark_open_file_title="Open document for to watermark \"${base_file_name}\""
	msg_watermark_save_file_name="${base_file_name} (watermarked).pdf"
	msg_watermark_finish_title="Watermark pages of document \"${base_file_name}\""
	msg_watermark_finish_ok="Done."
	msg_watermark_finish_error="An error has occurred."

	msg_stamp_open_file_title="Open document for to stamp \"${base_file_name}\""
	msg_stamp_save_file_name="${base_file_name} (stamped).pdf"
	msg_stamp_finish_title="Stamp pages of document \"${base_file_name}\""
	msg_stamp_finish_ok="Done."
	msg_stamp_finish_error="An error has occurred."

	msg_lock_save_file_name="${base_file_name} (locked).pdf"
	msg_lock_permissions_title="Select permissions"
	msg_lock_permissions_text="Select permissions for document \"${base_file_name}\""
	msg_lock_permissions_printing_top="Top Quality Printing"
	msg_lock_permissions_printing_degraded_printing="Lower Quality Printing"
	msg_lock_permissions_printing_modify_contents="Modify"
	msg_lock_permissions_printing_copy_contents="Copy contents"
	msg_lock_permissions_printing_modify_annotations="Modify annotations"
	msg_lock_insert_password_title="Insert password"
	msg_lock_insert_password_own="Master password is needed to set permissions. Please define master password for \"${base_file_name}\":"
	msg_lock_insert_password_usr="Set user password if you want to allow only trusted people to read this file. The master password and the user password must be different. If you don't want this feature, leave text field empty. User password of document \"${base_file_name}\":"
	msg_lock_finish_title="Lock the document \"${base_file_name}\""
	msg_lock_finish_ok="Done."
	msg_lock_finish_error="An error has occurred."

	msg_unlock_insert_password_title="Insert password"
	msg_unlock_insert_password_own="Please insert main password of \"${base_file_name}\":"
	msg_unlock_save_file_name="${base_file_name} (unlocked).pdf"
	msg_unlock_finish_title="Unlock the document \"${base_file_name}\""
	msg_unlock_finish_ok="Done."
	msg_unlock_finish_error="An error has occurred."

	msg_attach_open_file_title="Open file for attach to \"${base_file_name}\""
	msg_attach_save_file_name="${base_file_name} (with attachment).pdf"
	msg_attach_finish_title="Attach arbitrary file to document \"${base_file_name}\""
	msg_attach_finish_ok="Done."
	msg_attach_finish_error="An error has occurred."

	msg_unattach_select_dir="Select extraction directory"
	msg_unattach_finish_title="Copy all attached files of document \"${base_file_name}\""
	msg_unattach_finish_ok="Done."
	msg_unattach_finish_error="An error has occurred."

	msg_uncompress_save_file_name="${base_file_name} (uncompressed).pdf"
	msg_uncompress_finish_title="Uncompress the document \"${base_file_name}\""
	msg_uncompress_finish_ok="Done."
	msg_uncompress_finish_error="An error has occurred."

	msg_compress_save_file_name="${base_file_name} (compressed).pdf"
	msg_compress_finish_title="Compress the document \"${base_file_name}\""
	msg_compress_finish_ok="Done."
	msg_compress_finish_error="An error has occurred."

	msg_info_title="Information"
	msg_file_not_found="File not found."
}

load_language_fr () {
	msg_alert_pdftk_not_found_title="Composant non trouvé"
	msg_alert_pdftk_not_found_text="Logiciel pdftk non trouvé! S'il vous plaît, installez-le."

	msg_save_file_title="Sauver le fichier ..."

	msg_merge_one_file_only="Impossible de joindre un seul fichier. Sélectionnez au moins deux fichiers !"
	msg_merge_finish_title="Documents joints \"${base_file_name_list}\""
	msg_merge_finish_ok="Terminé."
	msg_merge_finish_error="Une erreur est survenue."

	msg_add_open_file="Sélectionnez le document à ajouter"
	msg_add_finish_title="Ajout d'un document à \"${base_file_name}\""
	msg_add_finish_ok="Terminé."
	msg_add_finish_error="Une erreur est survenue."

	msg_add_open_file="Choisissez le document à ajouter à \"${base_file_name}\""
	msg_add_finish_title="Ajout d'un document à \"${base_file_name}\""
	msg_add_finish_ok="Terminé."

	msg_extract_input_pages_range_title="Sélection de pages"
	msg_extract_input_pages_range="Notes: Le mot \"end\" peut être utilisé pour désigner la dernière page.
Pour désigner toute une plage de pages, inscrivez le numéro de la première et de la dernière page de cette plage séparés par un \"-\".
Pour désigner une page isolée inscrivez son numéro séparé par un espace.
Pour désigner une seule page, entrez seulement le numéro de cette page.

  Ex:
    de la page 4 à la dernière page:
      4-end
    la page 2, de la page 4 à la page 7, et la page 9:
      2 4-7 9
    seulement la page 3:
      3

Saisissez les pages de à extraire de \"${base_file_name}\" :"
	msg_extract_save_file_name="${base_file_name} (pages sélectionnées).pdf"
	msg_extract_finish_title="Extraction d'une sélection de pages de \"${file_name}\""
	msg_extract_finish_ok="Terminée."
	msg_extract_finish_error="Une erreur est survenue."

	msg_extract_even_save_file_name="${base_file_name} (pages paires).pdf"
	msg_extract_even_finish_title="Extraction des pages paires du document \"${file_name}\""

	msg_extract_odd_save_file_name="${base_file_name} (pages impaires).pdf"
	msg_extract_odd_finish_title="Extraction des pages impaires du document \"${file_name}\""

	msg_burst_select_dir="Selectionnez le dossier de destination"
	msg_burst_finish_title="Éclatement du document \"${file_name}\""
	msg_burst_finish_ok="Terminé."
	msg_burst_finish_error="Une erreur est survenue."

	msg_remove_input_pages_range_title="Supprimer une plage de pages"
	msg_remove_input_pages_range="Notes: Le mot \"end\" peut être utilisé pour désigner la dernière page.
Pour désigner toute une plage de pages, inscrivez le numéro de la première et de la dernière page de cette plage séparés par un \"-\".
Pour désigner une page isolée inscrivez son numéro séparé par un espace.
Pour désigner une seule page, entrez seulement le numéro de cette page.

  Ex:
    de la page 4 à la dernière page:
      4-end
    la page 2, de la page 4 à la page 7, et la page 9:
      2 4-7 9
    seulement la page 3:
      3

Saisissez les pages de à supprimer de \"${base_file_name}\" :"
	msg_remove_remove_all_pages_error="Impossible de supprimer toutes les pages du document!"
	if [ -z "${range1}" ]; then msg_remove_save_file_name="${base_file_name} (pages ${range2}).pdf"
		elif [ -z "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (pages ${range1}).pdf"
			elif [ "${range1}" != "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (pages ${range1}, ${range2}).pdf"
	fi
	msg_remove_finish_title="Suppression d'une sélection de pages du document \"${base_file_name}\""
	msg_remove_finish_ok="Terminée."
	msg_remove_finish_error="Une erreur est survenue."

	msg_rotate_left_save_file_name="${base_file_name} (rotation gauche).pdf"
	msg_rotate_left_finish_title="Rotation à gauche du document \"${base_file_name}\""
	msg_rotate_left_finish_ok="Terminée."
	msg_rotate_left_finish_error="Une erreur est survenue."

	msg_rotate_right_save_file_name="${base_file_name} (rotation droite).pdf"
	msg_rotate_right_finish_title="Rotation à droite du document \"${base_file_name}\""
	msg_rotate_right_finish_ok="Terminée."
	msg_rotate_right_finish_error="Une erreur est survenue."

	msg_rotate_overturn_save_file_name="${base_file_name} (renversé).pdf"
	msg_rotate_overturn_finish_title="Renversement du document \"${base_file_name}\""
	msg_rotate_overturn_finish_ok="Terminé."
	msg_rotate_overturn_finish_error="Une erreur est survenue."

	msg_rotate_original_save_file_name="${base_file_name} (restoré).pdf"
	msg_rotate_original_finish_title="Restauration de l'orientation originale du document \"${base_file_name}\""
	msg_rotate_original_finish_ok="Terminée."
	msg_rotate_original_finish_error="Une erreur est survenue."

	msg_repair_save_file_name="${base_file_name} (réparé).pdf"
	msg_repair_finish_title="Réparation du document \"${base_file_name}\""
	msg_repair_finish_ok="Terminée."
	msg_repair_finish_error="Une erreur est survenue."

	msg_watermark_open_file_title="Choisissez le document à utiliser comme filigrane pour \"${base_file_name}\""
	msg_watermark_save_file_name="${base_file_name} (filigrané).pdf"
	msg_watermark_finish_title="Ajout d'un filigrane aux pages du document \"${base_file_name}\""
	msg_watermark_finish_ok="Terminé."
	msg_watermark_finish_error="Une erreur est survenue."

	msg_stamp_open_file_title="Choisissez le document à utiliser comme timbre pour \"${base_file_name}\""
	msg_stamp_save_file_name="${base_file_name} (timbré).pdf"
	msg_stamp_finish_title="Timbrage des pages du document \"${base_file_name}\""
	msg_stamp_finish_ok="Terminé."
	msg_stamp_finish_error="Une erreur est survenue."

	msg_lock_save_file_name="${base_file_name} (verrouillé).pdf"
	msg_lock_permissions_title="Choisissez les permissions"
	msg_lock_permissions_text="Choisissez les permissions pour le document \"${base_file_name}\""
	msg_lock_permissions_printing_top="Impression haute qualité"
	msg_lock_permissions_printing_degraded_printing="Impression basse qualité"
	msg_lock_permissions_printing_modify_contents="Modifier"
	msg_lock_permissions_printing_copy_contents="contenu de la copie"
	msg_lock_permissions_printing_modify_annotations="Modifier les annotations"
	msg_lock_insert_password_title="Insérer un mot de passe"
	msg_lock_insert_password_own="Un mot de passe Administrateur est nécessaire pour définir les permissions.

Définissez un mot de passe Administrateur pour \"${base_file_name}\":"
	msg_lock_insert_password_usr="Définissez un mot de passe utilisateur si vous voulez permettre de lire ce fichier uniquement à des personnes de confiance.
Le mot de passe Administrateur et le mot de passe utilisateur doivent être différents.
Si vous ne voulez pas de cette fonction, laissez le champ de texte vide.

Mot de passe utilisateur du document \"${base_file_name}\":"
	msg_lock_finish_title="Verrouillage du document \"${base_file_name}\""
	msg_lock_finish_ok="Terminé."
	msg_lock_finish_error="Une erreur est survenue."

	msg_unlock_insert_password_title="Saisissez un mot de passe"
	msg_unlock_insert_password_own="Saisissez le mot de passe Administrateur pour \"${base_file_name}\":"
	msg_unlock_save_file_name="${base_file_name} (dévérouillé).pdf"
	msg_unlock_finish_title="Déverrouillage du document \"${base_file_name}\""
	msg_unlock_finish_ok="Terminé."
	msg_unlock_finish_error="Une erreur est survenue."

	msg_attach_open_file_title="Selectionnez le fichier à mettre en pièce-jointe à \"${base_file_name}\""
	msg_attach_save_file_name="${base_file_name} (avec pièce-jointe).pdf"
	msg_attach_finish_title="Ajout d'une pièce-jointe au document \"${base_file_name}\""
	msg_attach_finish_ok="Terminé."
	msg_attach_finish_error="Une erreur est survenue."

	msg_unattach_select_dir="Selectionnez le dossier de destination des fichiers extraits"
	msg_unattach_finish_title="Copie des fichiers en pièce-jointe à \"${base_file_name}\""
	msg_unattach_finish_ok="Terminée."
	msg_unattach_finish_error="Une erreur est survenue."

	msg_uncompress_save_file_name="${base_file_name} (décompressé).pdf"
	msg_uncompress_finish_title="décompression du document \"${base_file_name}\""
	msg_uncompress_finish_ok="Terminée."
	msg_uncompress_finish_error="Une erreur est survenue."

	msg_compress_save_file_name="${base_file_name} (compressé).pdf"
	msg_compress_finish_title="Compression du document \"${base_file_name}\""
	msg_compress_finish_ok="Terminée."
	msg_compres_finish_error="Une erreur est survenue."

	msg_info_title="Informations"
	msg_file_not_found="Fichier non trouvé."
}

load_language_it () {
	msg_alert_pdftk_not_found_title="Componente non trovato"
	msg_alert_pdftk_not_found_text="Il software pdftk non è stato trovato! Per favore, installalo."

	msg_save_file_title="Salva file ..."

	msg_merge_one_file_only="Non é possibile unire solo un file. Per favore, selezionane almeno due."
	msg_merge_finish_title="Unione dei documenti \"${base_file_name_list}\""
	msg_merge_finish_ok="Finita."
	msg_merge_finish_error="Si è verificato un errore."

	msg_add_open_file="Seleziona il documento da aggiungere"
	msg_add_finish_title="Aggiunta di un documento a \"${base_file_name}\""
	msg_add_finish_ok="Conclusa."
	msg_add_finish_error="Si è verificato un errore."

	msg_extract_input_pages_range_title="Range di estrazione"
	msg_extract_input_pages_range="Note: La parola chiave \"end\" puó essere usata come riferimento alla pagina finale del documento al posto di un numero di pagina. É possibile riferirsi ad una singola pagina omettendo il numero di pagina finale. Per favore inserisci il range di pagine di \"${base_file_name}\" da estrarre:"
	msg_extract_save_file_name="${base_file_name} (pagine estratte).pdf"
	msg_extract_finish_title="Estrazione delle pagine dal documento \"${file_name}\""
	msg_extract_finish_ok="Finita."
	msg_extract_finish_error="Si è verificato un errore."

	msg_extract_even_save_file_name="${base_file_name} (pagine pari).pdf"
	msg_extract_even_finish_title="Estrazione di tutte le pagine pari dal documento \"${file_name}\""

	msg_extract_odd_save_file_name="${base_file_name} (pagine dispari).pdf"
	msg_extract_odd_finish_title="Estrazione di tutte le pagine dispari dal documento \"${file_name}\""

	msg_burst_select_dir="Seleziona la cartella di destinazione"
	msg_burst_finish_title="Divisione completa del documento \"${file_name}\""
	msg_burst_finish_ok="Completata."
	msg_burst_finish_error="Si è verificato un errore."

	msg_remove_input_pages_range_title="Range di rimozione"
	msg_remove_input_pages_range="Note: La parola chiave \"end\" puó essere usata come riferimento alla pagina finale del documento al posto di un numero di pagina. É possibile riferirsi ad una singola pagina omettendo il numero di pagina finale. Per favore inserisci il range di pagine di \"${base_file_name}\" da rimuovere:"
	msg_remove_remove_all_pages_error="Non è possibile rimuovoere tutte le pagine dal documento!"
	if [ -z "${range1}" ]; then msg_remove_save_file_name="${base_file_name} (pagine ${range2}).pdf"
		elif [ -z "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (pagine ${range1}).pdf"
			elif [ "${range1}" != "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (pagine ${range1}, ${range2}).pdf"
	fi
	msg_remove_finish_title="Rimozione delle pagine dal documento \"${base_file_name}\""
	msg_remove_finish_ok="Finita."
	msg_remove_finish_error="Si è verificato un errore."

	msg_rotate_left_save_file_name="${base_file_name} (ruotato a sinistra).pdf"
	msg_rotate_left_finish_title="Rotazione a sinistra del documento \"${base_file_name}\""
	msg_rotate_left_finish_ok="Eseguita."
	msg_rotate_left_finish_error="Si è verificato un errore."

	msg_rotate_right_save_file_name="${base_file_name} (ruotato a destra).pdf"
	msg_rotate_right_finish_title="Rotazione a destra del documento \"${base_file_name}\""
	msg_rotate_right_finish_ok="Eseguita."
	msg_rotate_right_finish_error="Si è verificato un errore."

	msg_rotate_overturn_save_file_name="${base_file_name} (capovolto).pdf"
	msg_rotate_overturn_finish_title="Capovolgimento del documento \"${base_file_name}\""
	msg_rotate_overturn_finish_ok="Concluso."
	msg_rotate_overturn_finish_error="Si è verificato un errore."

	msg_rotate_original_save_file_name="${base_file_name} (ripristinato).pdf"
	msg_rotate_original_finish_title="Ripristino dell'orientazione originale del documento \"${base_file_name}\""
	msg_rotate_original_finish_ok="Conclusa."
	msg_rotate_original_finish_error="Si è verificato un errore."

	msg_repair_save_file_name="${base_file_name} (riparato).pdf"
	msg_repair_finish_title="Riparazione del documento \"${base_file_name}\""
	msg_repair_finish_ok="Effettuata."
	msg_repair_finish_error="Si è verificato un errore."

	msg_watermark_open_file_title="Scegli il documento da usare come filigrana per \"${base_file_name}\""
	msg_watermark_save_file_name="${base_file_name} (con filigrana).pdf"
	msg_watermark_finish_title="Filigranatura delle pagine del documento \"${base_file_name}\""
	msg_watermark_finish_ok="Completata."
	msg_watermark_finish_error="Si è verificato un errore."

	msg_stamp_open_file_title="Scegli il documento da usare come copertura di \"${base_file_name}\""
	msg_stamp_save_file_name="${base_file_name} (coperto).pdf"
	msg_stamp_finish_title="Copertura delle pagine del documento \"${base_file_name}\""
	msg_stamp_finish_ok="Finita."
	msg_stamp_finish_error="Si è verificato un errore."

	msg_lock_save_file_name="${base_file_name} (protetto).pdf"
	msg_lock_permissions_title="Seleziona permessi"
	msg_lock_permissions_text="Seleziona permessi per il documento \"${base_file_name}\""
	msg_lock_permissions_printing_top="Stampa alla massima qualitá"
	msg_lock_permissions_printing_degraded_printing="Stampa a bassa qualitá"
	msg_lock_permissions_printing_modify_contents="Modifica del contenuto"
	msg_lock_permissions_printing_copy_contents="Copia contenuto"
	msg_lock_permissions_printing_modify_annotations="Modifica annotazioni"
	msg_lock_insert_password_title="Inserisci password"
	msg_lock_insert_password_own="La password principale é necessaria per impostare i permessi. Per favore inserisci la password principale di \"${base_file_name}\":"
	msg_lock_insert_password_usr="La password utente è utile per consentire la lettura solo alle persone fidate. La password principale e quella utente devono essere diverse. Se non vuoi usufruire di questa funzionalità lascia il seguente campo vuoto. Password utente del documento \"${base_file_name}\":"

	msg_lock_finish_title="Protezione del documento \"${base_file_name}\""
	msg_lock_finish_ok="Eseguita."
	msg_lock_finish_error="Si è verificato un errore."

	msg_unlock_insert_password_title="Inserisci password"
	msg_unlock_insert_password_own="Per favore inserisci la passoerd principale di \"${base_file_name}\":"
	msg_unlock_save_file_name="${base_file_name} (sprotetto).pdf"
	msg_unlock_finish_title="Sprotezione del documento \"${base_file_name}\""
	msg_unlock_finish_ok="Eseguita."
	msg_unlock_finish_error="Si è verificato un errore."

	msg_attach_open_file_title="Scegli il file da allegare a \"${base_file_name}\""
	msg_attach_save_file_name="${base_file_name} (con allegati).pdf"
	msg_attach_finish_title="Allegamento di un file al documento \"${base_file_name}\""
	msg_attach_finish_ok="Concluso."
	msg_attach_finish_error="Si è verificato un errore."

	msg_unattach_select_dir="Seleziona la cartella di estrazione"
	msg_unattach_finish_title="Copia di tutti i file allegati al documento \"${base_file_name}\""
	msg_unattach_finish_ok="Conclusa."
	msg_unattach_finish_error="Si è verificato un errore."

	msg_uncompress_save_file_name="${base_file_name} (scompattato).pdf"
	msg_uncompress_finish_title="Decompressione del documento \"${base_file_name}\""
	msg_uncompress_finish_ok="Finita."
	msg_uncompress_finish_error="Si è verificato un errore."

	msg_compress_save_file_name="${base_file_name} (compressed).pdf"
	msg_compress_finish_title="Compressione del documento \"${base_file_name}\""
	msg_compress_finish_ok="Finita."
	msg_compress_finish_error="Si è verificato un errore."

	msg_info_title="Informazioni"
	msg_file_not_found="File non trovato."
}

load_language_ru () {
	msg_alert_pdftk_not_found_title="Компонент не найден"
	msg_alert_pdftk_not_found_text="Программное обеспечение pdftk не найдено! Установите pdftk."

	msg_save_file_title="Сохранить файл ..."

	msg_merge_one_file_only="Невозможно объединить только один файл. Пожалуйста, выберите не менее двух файлов."
	msg_merge_finish_title="Соединение документов \"${base_file_name_list}\""
	msg_merge_finish_ok="Готово."
	msg_merge_finish_error="Произошла ошибка."

	msg_add_open_file="Выберите документ для добавления"
	msg_add_finish_title="Добавление документа к \"${base_file_name}\""
	msg_add_finish_ok="Готово."
	msg_add_finish_error="Произошла ошибка."

	msg_extract_input_pages_range_title="Диапазон извлечения"
	msg_extract_input_pages_range="Примечание: Ключевое слово \"end\" может использоваться, чтобы сослаться на заключительную страницу документа вместо номера страницы. Сошлитесь на одну страницу, опуская номер конечной страницы. Пожалуйста, введите диапазон страниц \"${base_file_name}\" для извлечения:"
	msg_extract_save_file_name="${base_file_name} (извлеченные страницы).pdf"
	msg_extract_finish_title="Извлечение страниц из документа \"${file_name}\""
	msg_extract_finish_ok="Готово."
	msg_extract_finish_error="Произошла ошибка."

	msg_extract_even_save_file_name="${base_file_name} (четные страницы).pdf"
	msg_extract_even_finish_title="Извлечь все четные страницы из документа \"${file_name}\""

	msg_extract_odd_save_file_name="${base_file_name} (нечетные страницы).pdf"
	msg_extract_odd_finish_title="Извлечь все нечетные страницы из документа \"${file_name}\""

	msg_burst_select_dir="Выбрать каталог назначения"
	msg_burst_finish_title="Разорвать документ \"${base_file_name}\""
	msg_burst_finish_ok="Готово."
	msg_burst_finish_error="Произошла ошибка."

	msg_remove_input_pages_range_title="Удалить страницы"
	msg_remove_input_pages_range="Примечание: Ключевое слово \"end\" может использоваться, чтобы сослаться на заключительную страницу документа вместо номера страницы. Сошлитесь на одну страницу, опуская номер конечной страницы. ожалуйста, введите диапазон страниц \"${base_file_name}\" для удаления:"
	msg_remove_remove_all_pages_error="Не удается удалить все страницы из документа!"
	if [ -z "${range1}" ]; then msg_remove_save_file_name="${base_file_name} (страницы ${range2}).pdf"
		elif [ -z "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (страницы ${range1}).pdf"
			elif [ "${range1}" != "${range2}" ]; then msg_remove_save_file_name="${base_file_name} (страницы ${range1}, ${range2}).pdf"
	fi
	msg_remove_finish_title="Удаление страниц из документа \"${base_file_name}\""
	msg_remove_finish_ok="Готово."
	msg_remove_finish_error="Произошла ошибка."

	msg_rotate_left_save_file_name="${base_file_name} (повернут влево).pdf"
	msg_rotate_left_finish_title="Поворот документа влево \"${base_file_name}\""
	msg_rotate_left_finish_ok="Готово."
	msg_rotate_left_finish_error="Произошла ошибка."

	msg_rotate_right_save_file_name="${base_file_name} (повернут право).pdf"
	msg_rotate_right_finish_title="Поворот документа вправо \"${base_file_name}\""
	msg_rotate_right_finish_ok="Готово."
	msg_rotate_right_finish_error="Произошла ошибка."

	msg_rotate_overturn_save_file_name="${base_file_name} (перевернутый).pdf"
	msg_rotate_overturn_finish_title="Переворачивание документа \"${base_file_name}\""
	msg_rotate_overturn_finish_ok="Готово."
	msg_rotate_overturn_finish_error="Произошла ошибка."

	msg_rotate_original_save_file_name="${base_file_name} (восстановленный).pdf"
	msg_rotate_original_finish_title="Восстановление ​​оригинальной ориентации документа \"${base_file_name}\""
	msg_rotate_original_finish_ok="Готово."
	msg_rotate_original_finish_error="Произошла ошибка."

	msg_repair_save_file_name="${base_file_name} (отремонтированный).pdf"
	msg_repair_finish_title="Ремонт документа \"${base_file_name}\""
	msg_repair_finish_ok="Готово."
	msg_repair_finish_error="Произошла ошибка."

	msg_watermark_open_file_title="Открыть документ для отметки водяным знаком \"${base_file_name}\""
	msg_watermark_save_file_name="${base_file_name} (водяные знаки).pdf"
	msg_watermark_finish_title="Водяные знаки на страницах документа \"${base_file_name}\""
	msg_watermark_finish_ok="Готово."
	msg_watermark_finish_error="Произошла ошибка."

	msg_stamp_open_file_title="Открыть документ для штампа \"${base_file_name}\""
	msg_stamp_save_file_name="${base_file_name} (штампованный).pdf"
	msg_stamp_finish_title="Штамп на страницах документа \"${base_file_name}\""
	msg_stamp_finish_ok="Готово."
	msg_stamp_finish_error="Произошла ошибка."

	msg_lock_save_file_name="${base_file_name} (заблокированный).pdf"
	msg_lock_permissions_title="Выбрать права доступа"
	msg_lock_permissions_text="Выберите права доступа для документа \"${base_file_name}\""
	msg_lock_permissions_printing_top="Высокое качество печати"
	msg_lock_permissions_printing_degraded_printing="Низкое качество печати"
	msg_lock_permissions_printing_modify_contents="Изменить"
	msg_lock_permissions_printing_copy_contents="Содержание копии"
	msg_lock_permissions_printing_modify_annotations="Аннотация изменений"
	msg_lock_insert_password_title="Вставить пароль"
	msg_lock_insert_password_own="Нужен мастер-пароль для установки права доступа. Пожалуйста определите мастер-пароль для \"${base_file_name}\":"
	msg_lock_insert_password_usr="Установите пароль пользователя, если хотите чтобы только доверенные люди могли прочитать этот файл. Мастер-пароль и пароль пользователя должны быть разными. Если вы не хотите этой функции, оставьте поле пустым. Пароль пользователя для документа \"${base_file_name}\":"
	msg_lock_finish_title="Блокировка документа \"${base_file_name}\""
	msg_lock_finish_ok="Готово."
	msg_lock_finish_error="Произошла ошибка."

	msg_unlock_insert_password_title="Вставить пароль"
	msg_unlock_insert_password_own="Пожалуйста, вставьте главный пароль для \"${base_file_name}\":"
	msg_unlock_save_file_name="${base_file_name} (разблокированный).pdf"
	msg_unlock_finish_title="Разблокировка документа \"${base_file_name}\""
	msg_unlock_finish_ok="Готово."
	msg_unlock_finish_error="Произошла ошибка."

	msg_attach_open_file_title="Открыть файл для прикрепления к \"${base_file_name}\""
	msg_attach_save_file_name="${base_file_name} (с вложением).pdf"
	msg_attach_finish_title="Прикрепить произвольный файл к документу \"${base_file_name}\""
	msg_attach_finish_ok="Готово."
	msg_attach_finish_error="Произошла ошибка."

	msg_unattach_select_dir="Выберите каталог извлечения"
	msg_unattach_finish_title="Копировать все вложенные файлы из документа \"${base_file_name}\""
	msg_unattach_finish_ok="Готово."
	msg_unattach_finish_error="Произошла ошибка."

	msg_uncompress_save_file_name="${base_file_name} (расжатый).pdf"
	msg_uncompress_finish_title="Расжатие документа \"${base_file_name}\""
	msg_uncompress_finish_ok="Готово."
	msg_uncompress_finish_error="Произошла ошибка."

	msg_compress_save_file_name="${base_file_name} (сжатый).pdf"
	msg_compress_finish_title="Сжатие документа \"${base_file_name}\""
	msg_compress_finish_ok="Готово."
	msg_compress_finish_error="Произошла ошибка."

	msg_info_title="Информация"
	msg_file_not_found="Файл не найден."
}

load_language () {
	## Load localized strings AFTER english strings
	## - if localized strings not found use english for default
	## - if localized strings are incomplete use english only fot missing strings :-)
	load_language_en && [ "${lang}" != "en" ] && load_language_${lang}
}

lang=${LANGUAGE%%:*}
type load_language_${lang} > /dev/null || lang='en'
load_language

################################################

kdialog_bin=$(which kdialog)
[ -z "${kdialog_bin}" ] && echo "kdialog not found!" && exit 1

pdftk_bin=$(which pdftk)
[ -z "${pdftk_bin}" ] && "${kdialog_bin}" --title "${msg_alert_pdftk_not_found_title}" --icon configure --error "${msg_alert_pdftk_not_found_text}" && exit 2

################################################

## Merge many files in one.
merge () {
	if [ ${#} -lt 2 ]; then
		"${kdialog_bin}" -sorry "${msg_merge_one_file_only}" && exit 1
	fi

	## workdir=first file's directory
	work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"

	base_file_name_list=""
	for input in "${@}"; do
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"
		[ -n "${base_file_name_list}" ] && base_file_name_list="${base_file_name_list}, "
		base_file_name_list="${base_file_name_list}${base_file_name}"
	done

	## Reload language strings with current variables
	load_language

	output_file_name="${work_dir}/${base_file_name_list}"
	if [ -f "${output_file_name}" ]; then
		output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${work_dir}/${output_file_name}" application/pdf) || exit 0
	fi

	"${pdftk_bin}" "${@}" cat output "${output_file_name}" 2> "${work_dir}/errors merge ${base_file_name_list}.log" && \
	"${kdialog_bin}" --title "${msg_merge_finish_title}" --passivepopup "${msg_merge_finish_ok}" 5 || \
	"${kdialog_bin}" --title "${msg_merge_finish_title}" --passivepopup "${msg_merge_finish_error}" 5
}

## Add one file to one or many.
add () {
	pdf_to_add=$("${kdialog_bin}" --title "${msg_add_open_file}" --icon document-open --getopenfilename " " application/pdf) || exit 0
	pdf_to_addFileName="${pdf_to_add##*/}"
	pdf_to_addBaseFileName="${pdf_to_addFileName%.*}"

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${base_file_name}, ${pdf_to_addBaseFileName}.pdf"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" "${pdf_to_add}" output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_add_finish_title}" --passivepopup "${msg_add_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_add_finish_title}" --passivepopup "${msg_add_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

## Extract same range of pages from one or many files.
extract () {
	range=$("${kdialog_bin}" --title "${msg_extract_input_pages_range_title}" --icon edit-copy --inputbox "${msg_extract_input_pages_range}" "1-end") || exit 0

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_extract_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat ${range} output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_extract_finish_title}" --passivepopup "${msg_extract_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_extract_finish_title}" --passivepopup "${msg_extract_finish_error}" 5
	done
}

## Extract even pages from one or many files.
extract_even () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_extract_even_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat 1-endeven output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_extract_even_finish_title}" --passivepopup "${msg_extract_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_extract_finish_title}" --passivepopup "${msg_extract_finish_error}" 5
	done
}

## Extract odd pages from one or many files.
extract_odd () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_extract_odd_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat 1-endodd output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_extract_odd_finish_title}" --passivepopup "${msg_extract_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_extract_finish_title}" --passivepopup "${msg_extract_finish_error}" 5
	done
}

## Explode one or many documents, one file for page.
burst () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_dir_name="${work_dir}/${base_file_name}"
		if [ -d "${output_dir_name}" ]; then
			output_dir_name=$("${kdialog_bin}" --title "${msg_burst_select_dir}" --icon document-save-all --getexistingdirectory ".") || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		mkdir -p "${output_dir_name}" && \
		"${pdftk_bin}" "${input}" burst output "${output_dir_name}/page_%04d.pdf" && \
		rm "${output_dir_name}/doc_data.txt" && \
		"${kdialog_bin}" --title "${msg_burst_finish_title}" --passivepopup "${msg_burst_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_burst_finish_title}" --passivepopup "${msg_burst_finish_error}" 5
	done
}

## Remove a range of pages from one or many documents.
remove () {
	range=$("${kdialog_bin}" --title "${msg_remove_input_pages_range_title}" --icon edit-copy --inputbox "${msg_remove_input_pages_range}" "2-end") || exit 0
	# delete spaces
	range=$(echo "${range}" | sed 's/[[:blank:]]*//g')

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		# take total number of pages
		total_pages=$("${pdftk_bin}" "${input}" dump_data | grep "NumberOfPages" | cut -d" " -f 2-)

		## Check initial range limit and fix it
		# take string before last minus simbol
		first="${range%-*}"
		if [ "${first}" = "end" ]; then first="${total_pages}"
		else
			#Delete non-number digits
			first=$(echo "${first}" | sed "s/[^[0-9]]*//g")
			if [ -z "${first}" ]; then first=1
				else if [ "${first}" -eq 0 ]; then first=1
					else if [ "${first}" -gt "${total_pages}" ]; then first="${total_pages}"; fi
				fi
			fi
		fi

		## Check final range limit and fix it
		# take string after last minus simbol
		last="${range#*-}"
		if [ "${last}" = "end" ]; then last="${total_pages}"
		else
			#Delete non-number digits
			last=$(echo "${last}" | sed "s/[^[0-9]]*//g")
			if [ -z "${last}" ]; then last="${total_pages}"
				elif [ "${last}" -lt "${first}" ]; then last="${first}"
					elif [ "${last}" -gt "${total_pages}" ]; then last="${total_pages}"
			fi
		fi
		## Now, range limits are included in the page range of document
		## first >= 1 and last <= total_pages

		# Define range1
		if [ "${first}" -eq 1 ]; then range1=''
			elif [ "${first}" -eq 2 ]; then range1="1"
			else range1="1-$(($first-1))"
		fi

		# Define range2
		if [ "${last}" -eq "${total_pages}" ]; then range2=''
			elif [ "${last}" -eq "$((${total_pages}-1))" ]; then range2="${total_pages}"
			else range2="$(($last+1))-${total_pages}"
		fi

		# if you want remove all pages
		[ "x${range1}" = "x" -a "x${range2}" = "x" ] && "${kdialog_bin}" --title "${msg_remove_input_pages_range_title}" --icon edit-copy --sorry "${msg_remove_remove_all_pages_error}" && exit 1

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_remove_save_file_name}"
		if [ -d "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat ${range1} ${range2} output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_remove_finish_title}" --passivepopup "${msg_remove_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_remove_finish_title}" --passivepopup "${msg_remove_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

## Rotate to left one or many documents.
left () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_rotate_left_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat 1-endleft output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_rotate_left_finish_title}" --passivepopup "${msg_rotate_left_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_rotate_left_finish_title}" --passivepopup "${msg_rotate_left_finish_error}" 5
	done
}

## Rotate to right one or many documents.
right () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_rotate_right_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat 1-endright output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_rotate_right_finish_title}" --passivepopup "${msg_rotate_right_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_rotate_right_finish_title}" --passivepopup "${msg_rotate_right_finish_error}" 5
	done
}

## Overturn one or many documents.
overturn () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_rotate_overturn_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat 1-enddown output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_rotate_overturn_finish_title}" --passivepopup "${msg_rotate_overturn_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_rotate_overturn_finish_title}" --passivepopup "${msg_rotate_overturn_finish_error}" 5
	done
}

## Restore original orientation of one or many documents.
restore () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_rotate_original_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" cat 1-endnorth output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_rotate_original_finish_title}" --passivepopup "${msg_rotate_original_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_rotate_original_finish_title}" --passivepopup "${msg_rotate_original_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

# Repair one or many documents.
repair () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_repair_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_repair_finish_title}" --passivepopup "${msg_repair_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_repair_finish_title}" --passivepopup "${msg_repair_finish_error}" 5
	done
}

## Add watermark from file to one or many documents.
watermark () {
	background=$("${kdialog_bin}" --title "${msg_watermark_open_file_title}" --icon document-open --getopenfilename "." application/pdf) || exit 0

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_watermark_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" background "${background}" output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_watermark_finish_title}" --passivepopup "${msg_watermark_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_watermark_finish_title}" --passivepopup "${msg_watermark_finish_error}" 5
	done
}

## Add stamp from file to one or many documents.
stamp () {
	foreground=$("${kdialog_bin}" --title "${msg_stamp_open_file_title}" --icon document-open --getopenfilename "." application/pdf) || exit 0

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_stamp_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${@}" stamp "${foreground}" output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_stamp_finish_title}" --passivepopup "${msg_stamp_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_stamp_finish_title}" --passivepopup "${msg_stamp_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

lock () {
	own_passwd=$("${kdialog_bin}" --title "${msg_lock_insert_password_title}" --password "${msg_lock_insert_password_own}") || exit 0
	usr_passwd=$("${kdialog_bin}" --title "${msg_lock_insert_password_title}" --password "${msg_lock_insert_password_usr}") || exit 0
	permissions=$("${kdialog_bin}" --title "${msg_lock_permissions_title}" --icon configure --checklist "${msg_lock_permissions_text}" Printing "${msg_lock_permissions_printing_top}" off DegradedPrinting "${msg_lock_permissions_printing_degraded_printing}" off ModifyContents "${msg_lock_permissions_printing_modify_contents}" off copy_contents "${msg_lock_permissions_printing_copy_contents}" off modify_annotations "${msg_lock_permissions_printing_modify_annotations}" off --separate-output) || exit 0

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_lock_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" output "${output_file_name}" allow ${permissions} owner_pw "${own_passwd}" user_pw "${usr_passwd}" && \
		"${kdialog_bin}" --title "${msg_lock_finish_title}" --passivepopup "${msg_lock_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_lock_finish_title}" --passivepopup "${msg_lock_finish_error}" 5
	done
}

unlock () {
	passwd=$("${kdialog_bin}" --title "${msg_unlock_insert_password_title}" --password "${msg_unlock_insert_password_own}") || exit 0

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_unlock_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" input_pw "${passwd}" output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_unlock_finish_title}" --passivepopup "${msg_unlock_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_unlock_finish_title}" --passivepopup "${msg_unlock_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

attach () {
	filesToAttach=$("${kdialog_bin}" --title "${msg_attach_open_file_title}" --icon document-open --getopenfilename ".") || exit 0

	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_attach_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" attach_files "${filesToAttach}" output "${output_file_name}" && \
		"${kdialog_bin}" --title "${msg_attach_finish_title}" --passivepopup "${msg_attach_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_attach_finish_title}" --passivepopup "${msg_attach_finish_error}" 5
	done
}

unattach () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_dir_name="${work_dir}/${base_file_name} attachments/"
		if [ -e "${output_dir_name}" ]; then
			output_dir_name=$("${kdialog_bin}" --title "${msg_unattach_select_dir}" --icon folder --getexistingdirectory "${output_dir_name}") || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		mkdir -p "${output_dir_name}" && \
		"${pdftk_bin}" "${input}" unpack_files output "${output_dir_name}" && \
		"${kdialog_bin}" --title "${msg_unattach_finish_title}" --passivepopup "${msg_unattach_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_unattach_finish_title}" --passivepopup "${msg_unattach_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

uncompress () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_uncompress_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" output "${output_file_name}" uncompress && \
		"${kdialog_bin}" --title "${msg_uncompress_finish_title}" --passivepopup "${msg_uncompress_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_uncompress_finish_title}" --passivepopup "${msg_uncompress_finish_error}" 5
	done
}

compress () {
	for input in "${@}"; do
		work_dir="${input%/*}" && [ ! -d "${work_dir}" ] && work_dir="$(pwd)"
		file_name="${input##*/}"
		base_file_name="${file_name%.*}"

		## Reload language strings with current variables
		load_language

		output_file_name="${work_dir}/${msg_compress_save_file_name}"
		if [ -e "${output_file_name}" ]; then
			output_file_name=$("${kdialog_bin}" --title "${msg_save_file_title}" --icon document-save --getsavefilename "${output_file_name}" application/pdf) || exit 0
		fi

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		"${pdftk_bin}" "${input}" output "${output_file_name}" compress && \
		"${kdialog_bin}" --title "${msg_compress_finish_title}" --passivepopup "${msg_compress_finish_ok}" 5 || \
		"${kdialog_bin}" --title "${msg_compress_finish_title}" --passivepopup "${msg_compress_finish_error}" 5
	done
}

#---------------------------------------------------------------------------------------------------------------------------------------------------

info () {
	newline="\n"
	msg=""
	while [ $# -ne 0 ]; do
		file_name="${1##*/}"

		[ ! -f "${work_dir}/${file_name}" ] && shift && "${kdialog_bin}" --title "${msg_finish_title}" --passivepopup "${msg_file_not_found}" 5 && continue
		[ -n "${msg}" ] && msg="${msg}${newline}"
		msg="${msg}File: ${file_name}${newline}"
		msg="${msg}$("${pdftk_bin}" "${work_dir}/${file_name}" dump_data)${newline}"

		shift
	done

	"${kdialog_bin}" --title "${msg_info_title}" --icon help-about --msgbox "${msg}"
}

#### main

"${action}" "${@}" || exit 0
