From d4459eb6d616e89e3169b91170723830c24972d1 Mon Sep 17 00:00:00 2001
From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com>
Date: Sun, 2 Apr 2023 23:59:22 +0100
Subject: [PATCH] custom default Lang
---
README.md | 6 +-
build.gradle | 2 +-
.../stirling/software/SPDF/config/Beans.java | 19 +-
src/main/resources/messages_ar_AR.properties | 4 +
src/main/resources/messages_fr_FR.properties | 192 +++++++++---------
src/main/resources/templates/add-image.html | 2 +-
.../resources/templates/compress-pdf.html | 2 +-
.../templates/convert/file-to-pdf.html | 2 +-
.../templates/convert/img-to-pdf.html | 2 +-
.../templates/convert/pdf-to-img.html | 2 +-
.../templates/convert/pdf-to-pdfa.html | 2 +-
src/main/resources/templates/error.html | 2 +-
.../resources/templates/extract-images.html | 2 +-
.../resources/templates/fragments/navbar.html | 87 +++-----
src/main/resources/templates/home.html | 2 +-
src/main/resources/templates/merge-pdfs.html | 4 +-
src/main/resources/templates/ocr-pdf.html | 2 +-
.../resources/templates/pdf-organizer.html | 2 +-
.../resources/templates/remove-pages.html | 2 +-
src/main/resources/templates/rotate-pdf.html | 2 +-
.../templates/security/add-password.html | 2 +-
.../templates/security/add-watermark.html | 2 +-
.../templates/security/change-metadata.html | 2 +-
.../security/change-permissions.html | 2 +-
.../templates/security/remove-password.html | 2 +-
.../templates/security/remove-watermark.html | 2 +-
src/main/resources/templates/split-pdfs.html | 2 +-
27 files changed, 172 insertions(+), 182 deletions(-)
diff --git a/README.md b/README.md
index cc5a4bdf9..32aac87ab 100644
--- a/README.md
+++ b/README.md
@@ -91,7 +91,9 @@ Also please note as i add new features i will google translate existing language
2. Use the application by following the instructions on the website.
-## Customize App Name
+## Customize App
Stirling PDF allows easy customization of the visible application name.
Simply use environment variables APP_HOME_NAME, APP_HOME_DESCRIPTION and APP_NAVBAR_NAME with Docker or Java.
-If running Java directly, you can also pass these as properties using -D arguments.
\ No newline at end of file
+If running Java directly, you can also pass these as properties using -D arguments.
+
+Using the same method you can also change the default language by providing APP_LOCALE with values like de-DE fr-FR or ar-AR to select your default language (Will always default to English on invalid locale)
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index ce906083c..117b7c09f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ plugins {
}
group = 'stirling.software'
-version = '0.4.6'
+version = '0.4.7'
sourceCompatibility = '17'
repositories {
diff --git a/src/main/java/stirling/software/SPDF/config/Beans.java b/src/main/java/stirling/software/SPDF/config/Beans.java
index e9cfa48c7..ce5a12f34 100644
--- a/src/main/java/stirling/software/SPDF/config/Beans.java
+++ b/src/main/java/stirling/software/SPDF/config/Beans.java
@@ -16,7 +16,24 @@ public class Beans implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
- slr.setDefaultLocale(Locale.UK);
+
+ String appLocaleEnv = System.getProperty("APP_LOCALE");
+ if(appLocaleEnv == null)
+ appLocaleEnv = System.getenv("APP_LOCALE");
+ Locale defaultLocale = Locale.UK; // Fallback to UK locale if environment variable is not set
+
+ if (appLocaleEnv != null && !appLocaleEnv.isEmpty()) {
+ Locale tempLocale = Locale.forLanguageTag(appLocaleEnv);
+ String tempLanguageTag = tempLocale.toLanguageTag();
+
+ if (appLocaleEnv.equalsIgnoreCase(tempLanguageTag)) {
+ defaultLocale = tempLocale;
+ } else {
+ System.err.println("Invalid APP_LOCALE environment variable value. Falling back to default Locale.UK.");
+ }
+ }
+
+ slr.setDefaultLocale(defaultLocale);
return slr;
}
diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties
index 6c1d37fd5..226735898 100644
--- a/src/main/resources/messages_ar_AR.properties
+++ b/src/main/resources/messages_ar_AR.properties
@@ -87,6 +87,10 @@ home.ocr.desc=\u064A\u0642\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u062C \u06
home.extractImages.title=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631
home.extractImages.desc=\u064A\u0633\u062A\u062E\u0631\u062C \u062C\u0645\u064A\u0639 \u0627\u0644\u0635\u0648\u0631 \u0645\u0646 \u0645\u0644\u0641 PDF \u0648\u064A\u062D\u0641\u0638\u0647\u0627 \u0641\u064A \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A
+home.pdfToPDFA.title = \u062A\u062D\u0648\u064A\u0644 \u0645\u0644\u0641\u0627\u062A PDF \u0625\u0644\u0649 PDF / A
+home.pdfToPDFA.desc = \u062A\u062D\u0648\u064A\u0644 PDF \u0625\u0644\u0649 PDF / A \u0644\u0644\u062A\u062E\u0632\u064A\u0646 \u0637\u0648\u064A\u0644 \u0627\u0644\u0645\u062F\u0649
+
+
navbar.settings=\u0625\u0639\u062F\u0627\u062F\u0627\u062A
settings.title=\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A
settings.update=\u0627\u0644\u062A\u062D\u062F\u064A\u062B \u0645\u062A\u0627\u062D
diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties
index 7ecb0fd13..fa83d47ed 100644
--- a/src/main/resources/messages_fr_FR.properties
+++ b/src/main/resources/messages_fr_FR.properties
@@ -13,8 +13,8 @@ multiPdfPrompt=Choisir des PDF (2+)
multiPdfDropPrompt=Sélectionnez (ou glissez-déposez) tous les PDF dont vous avez besoin
imgPrompt=Choisir une image
genericSubmit=Soumettre
-processTimeWarning=AttentionÂ: ce processus peut prendre jusqu'Ã une minute en fonction de la taille du fichier
-pageOrderPrompt=Ordre des pages (Entrez une liste de numéros de page séparés par des virgules)Â:
+processTimeWarning=Attention�: ce processus peut prendre jusqu'à une minute en fonction de la taille du fichier
+pageOrderPrompt=Ordre des pages (Entrez une liste de numéros de page séparés par des virgules):
goToPage=Aller
true=Vrai
false=Faux
@@ -74,65 +74,66 @@ home.removePassword.desc=Supprimez la protection par mot de passe de votre docum
home.compressPdfs.title=Compresser les PDF
home.compressPdfs.desc=Compressez les PDF pour réduire leur taille de fichier.
-home.changeMetadata.title=Modifier les métadonnées
-home.changeMetadata.desc=Modifier/Supprimer/Ajouter des métadonnées d'un document PDF
+home.changeMetadata.title=Modifier les métadonnées
+home.changeMetadata.desc=Modifier/Supprimer/Ajouter des métadonnées d'un document PDF
home.fileToPDF.title=Convertir un fichier en PDF
home.fileToPDF.desc=Convertissez presque n\u2019importe quel fichier en PDF (DOCX, PNG, XLS, PPT, TXT et plus)
-home.ocr.title=Exécuter l'OCR sur les scans PDF et/ou de nettoyage
-home.ocr.desc=Le nettoyage analyse et détecte le texte des images dans un PDF et le rajoute en tant que texte.
+home.ocr.title=Exécuter l'OCR sur les scans PDF et/ou de nettoyage
+home.ocr.desc=Le nettoyage analyse et détecte le texte des images dans un PDF et le rajoute en tant que texte.
home.extractImages.title=Extraire les images
home.extractImages.desc=Extrait toutes les images d\u2019un PDF et les enregistre au format zip
-navbar.settings=Paramètres
-settings.title=Paramètres
-settings.update=Mise à jour disponible
-settings.appVersion=Version de l\u2019application :
-settings.downloadOption.title=Choisissez l\u2019option de téléchargement (pour les téléchargements sans fichier unique) :
-settings.downloadOption.1=Ouvrir dans la même fenêtre
-settings.downloadOption.2=Ouvrir dans une nouvelle fenêtre
-settings.downloadOption.3=Fichier téléchargé
-settings.zipThreshold=Zip les fichiers lorsque le nombre de fichiers téléchargés dépasse
+home.pdfToPDFA.title=Convertir PDF en PDF/A
+home.pdfToPDFA.desc=Convertir un PDF en PDF/A pour un stockage à long terme
+
+navbar.settings=Paramètres
+settings.title=Paramètres
+settings.update=Mise à jour disponible
+settings.appVersion=Version de l'application :
+settings.downloadOption.title=Choisissez l'option de téléchargement (pour les téléchargements sans fichier unique) :
+settings.downloadOption.1=Ouvrir dans la même fenêtre
+settings.downloadOption.2=Ouvrir dans une nouvelle fenêtre
+settings.downloadOption.3=Fichier téléchargé
+settings.zipThreshold=Zip les fichiers lorsque le nombre de fichiers téléchargés dépasse
#OCR
-ocr.title=OCR / Nettoyage de numérisation
-ocr.header=Nettoyage des scans / OCR (reconnaissance optique des caractères)
-ocr.selectText.1=Sélectionnez les langues à détecter dans le PDF (celles répertoriées sont celles actuellement détectées) :
+ocr.title=OCR / Nettoyage de numérisation
+ocr.header=Nettoyage des scans / OCR (reconnaissance optique des caractères)
+ocr.selectText.1=Sélectionnez les langues à détecter dans le PDF (celles répertoriées sont celles actuellement détectées) :
ocr.selectText.2=Produire un fichier texte contenant du texte OCR avec le PDF OCR
-ocr.selectText.3=Les pages correctes ont été numérisées à un angle oblique en les remettant en place
+ocr.selectText.3=Les pages correctes ont été numérisées à un angle oblique en les remettant en place
ocr.selectText.4=Nettoyer la page pour qu'il soit moins probable que l'OCR trouve du texte dans le bruit de fond. (Pas de changement de sortie)
ocr.selectText.5=Nettoyer la page afin qu'il soit moins probable que l'OCR trouve du texte dans le bruit de fond, maintient le nettoyage dans la sortie.
ocr.selectText.6=Ignore les pages contenant du texte interactif, seulement les pages OCR qui sont des images
-ocr.selectText.7=Forcer l'OCR, OCR chaque page supprimera tous les éléments de texte d'origine
+ocr.selectText.7=Forcer l'OCR, OCR chaque page supprimera tous les éléments de texte d'origine
ocr.selectText.8=Normal (Erreur si le PDF contient du texte)
-ocr.selectText.9=Paramètres supplémentaires
+ocr.selectText.9=Paramètres supplémentaires
ocr.selectText.10=Mode ROC
-ocr.help=Veuillez lire cette documentation pour savoir comment l\u2019utiliser pour d\u2019autres langues et/ou une utilisation non dans docker
-ocr.credit=Ce service utilise OCRmyPDF et Tesseract pour l\u2019OCR.
+ocr.help=Veuillez lire cette documentation pour savoir comment l'utiliser pour d'autres langues et/ou une utilisation non dans docker
+ocr.credit=Ce service utilise OCRmyPDF et Tesseract pour l'OCR.
ocr.submit=Traiter PDF avec OCR
extractImages.title=Extraire les images
extractImages.header=Extraire les images
-extractImages.selectText=Sélectionner le format d\u2019image pour convertir les images extraites en
-extractImages.submit=Extrait
+extractImages.selectText=Sélectionner le format d'image pour convertir les images extraites en
+extractImages.submit=Extraire
-
-#File au format PDF
-fileToPDF.title=Fichier au PDF
-fileToPDF.header=Convertir n\u2019importe quel fichier au format PDF
+#File to PDF
+fileToPDF.title=Fichier au format PDF
+fileToPDF.header=Convertir n'importe quel fichier au format PDF
fileToPDF.credit=Ce service utilise LibreOffice et Unoconv pour la conversion de fichiers.
-fileToPDF.supportedFileTypes=Les types de fichiers pris en charge doivent inclure les éléments ci-dessous, mais pour une liste complète et mise à jour des formats pris en charge, veuillez vous référer à la documentation de LibreOffice
+fileToPDF.supportedFileTypes=Les types de fichiers pris en charge doivent inclure les éléments ci-dessous, mais pour une liste complète et mise à jour des formats pris en charge, veuillez vous référer à la documentation de LibreOffice.
fileToPDF.submit=Convertir en PDF
-
#Add image
addImage.title=Ajouter une image
addImage.header=Ajouter une image au PDF (Travail en cours)
@@ -142,13 +143,13 @@ addImage.submit=Ajouter une image
compress.title=Compresser
compress.header=Compresser le PDF
compress.credit=Ce service utilise OCRmyPDF pour la compression/optimisation PDF.
-compress.selectText.1=Niveau d\u2019optimisation :
-compress.selectText.2=0 (pas d\u2019optimisation)
-compress.selectText.3=1 (par défaut, optimisation sans perte)
+compress.selectText.1=Niveau d'optimisation :
+compress.selectText.2=0 (pas d'optimisation)
+compress.selectText.3=1 (par défaut, optimisation sans perte)
compress.selectText.4=2 (optimisation avec perte)
compress.selectText.5=3 (optimisation avec perte, plus agressive)
-compress.selectText.6=Activer l\u2019affichage Web rapide (linéariser PDF)
-compress.selectText.7=Activer l\u2019encodage JBIG2 avec perte
+compress.selectText.6=Activer l'affichage Web rapide (linéariser PDF)
+compress.selectText.7=Activer l'encodage JBIG2 avec perte
compress.submit=Compresser
@@ -166,54 +167,50 @@ pdfOrganiser.submit=Réorganiser les pages
#pageRemover
pageRemover.title=Suppresseur de pages
pageRemover.header=Outil de suppression de pages PDF
-pageRemover.pagesToDelete=Pages à supprimer (Entrez une liste de numéros de page séparés par des virgules)Â:
+pageRemover.pagesToDelete=Pages à supprimer (Entrez une liste de numéros de page séparés par des virgules):
pageRemover.submit=Supprimer des pages
#rotate
rotate.title=Faire pivoter le PDF
rotate.header=Faire pivoter le PDF
-rotate.selectAngle=S\u00e9lectionner l'angle de rotation (en multiples de 90 degr\u00e9s):
+rotate.selectAngle=Sélectionner l'angle de rotation (en multiples de 90 degrés) :
rotate.submit=Rotation
-
-
-
-#merge
+#Split PDF
split.title=Fractionner le PDF
split.header=Diviser le PDF
-split.desc.1=Les numéros que vous sélectionnez sont le numéro de page sur lequel vous souhaitez faire un fractionnement
-split.desc.2=Ainsi, la sélection de 1,3,7-8 diviserait un document de 10 pages en 6 PDF distincts avecÂ:
-split.desc.3=Document #1Â: Page 1
-split.desc.4=Document #2Â: Pages 2 et 3
-split.desc.5=Document #3Â: Pages 4, 5 et 6
-split.desc.6=Document #4Â: Page 7
-split.desc.7=Document #5Â: Page 8
-split.desc.8=Document #6Â: Pages 9 et 10
-split.splitPages=Entrez les pages sur lesquelles fractionnerÂ:
+split.desc.1=Les numéros que vous sélectionnez sont le numéro de page sur lequel vous souhaitez faire un fractionnement.
+split.desc.2=Ainsi, la sélection de 1,3,7-8 diviserait un document de 10 pages en 6 PDF distincts avec :
+split.desc.3=Document #1 : Page 1
+split.desc.4=Document #2 : Pages 2 et 3
+split.desc.5=Document #3 : Pages 4, 5 et 6
+split.desc.6=Document #4 : Page 7
+split.desc.7=Document #5 : Page 8
+split.desc.8=Document #6 : Pages 9 et 10
+split.splitPages=Entrez les pages sur lesquelles fractionner :
split.submit=Diviser
-
-#merge
+#imageToPDF
imageToPDF.title=Image au format PDF
imageToPDF.header=Image au format PDF
imageToPDF.submit=Convertir
-imageToPDF.selectText.1=Étirer pour s'adapter
+imageToPDF.selectText.1=Étirer pour s'adapter
imageToPDF.selectText.2=Rotation automatique du PDF
-imageToPDF.selectText.3=Logique de fichiers multiples (activé uniquement si vous travaillez avec plusieurs images)
-imageToPDF.selectText.4= Fusionner en un seul PDF
-imageToPDF.selectText.5= Convertir en PDFs distincts
+imageToPDF.selectText.3=Logique de fichiers multiples (activé uniquement si vous travaillez avec plusieurs images)
+imageToPDF.selectText.4=Fusionner en un seul PDF
+imageToPDF.selectText.5=Convertir en PDFs distincts
-#pdfToImage
+#PDF to Image
pdfToImage.title=PDF vers image
pdfToImage.header=PDF vers image
pdfToImage.selectText=Format d'image
-pdfToImage.singleOrMultiple=Type de résultat d'image
+pdfToImage.singleOrMultiple=Type de résultat d'image
pdfToImage.single=Une seule grande image
pdfToImage.multi=Plusieurs images
pdfToImage.colorType=Type de couleur
pdfToImage.color=Couleur
pdfToImage.grey=Niveaux de gris
-pdfToImage.blackwhite=Noir et Blanc (Peut perdre des données !)
+pdfToImage.blackwhite=Noir et Blanc (Peut perdre des données !)
pdfToImage.submit=Convertir
#addPassword
@@ -237,36 +234,36 @@ addPassword.submit=Crypter
#watermark
watermark.title=Ajouter un filigrane
watermark.header=Ajouter un filigrane
-watermark.selectText.1=Sélectionnez le PDF auquel ajouter un filigraneÂ:
-watermark.selectText.2=Texte du filigraneÂ:
-watermark.selectText.3=Taille de la policeÂ:
-watermark.selectText.4=Rotation (0-360)Â:
-watermark.selectText.5=widthSpacer (Espace entre chaque filigrane horizontalement)Â:
-watermark.selectText.6=heightSpacer (Espace entre chaque filigrane verticalement)Â:
-watermark.selectText.7=Opacité (0 % - 100 %):
+watermark.selectText.1=Sélectionnez le PDF auquel ajouter un filigrane :
+watermark.selectText.2=Texte du filigrane :
+watermark.selectText.3=Taille de la police :
+watermark.selectText.4=Rotation (0-360) :
+watermark.selectText.5=widthSpacer (Espace entre chaque filigrane horizontalement) :
+watermark.selectText.6=heightSpacer (Espace entre chaque filigrane verticalement) :
+watermark.selectText.7=Opacité (0 % - 100 %) :
watermark.submit=Ajouter un filigrane
#remove-watermark
remove-watermark.title=Supprimer le filigrane
remove-watermark.header=Supprimer le filigrane
-remove-watermark.selectText.1=Sélectionnez le PDF pour supprimer le filigrane:
-remove-watermark.selectText.2=Texte du filigrane:
+remove-watermark.selectText.1=Sélectionnez le PDF pour supprimer le filigrane :
+remove-watermark.selectText.2=Texte du filigrane :
remove-watermark.submit=Supprimer le filigrane
-#Change permissions
+#Change Permissions
permissions.title=Modifier les autorisations
permissions.header=Modifier les autorisations
-permissions.warning=Attention pour que ces permissions soient immuables il est recommandé de les définir avec un mot de passe via la page add-password
-permissions.selectText.1=Sélectionnez PDF pour modifier les autorisations
-permissions.selectText.2=Autorisations à définir
+permissions.warning=Attention pour que ces permissions soient immuables il est recommandé de les définir avec un mot de passe via la page add-password.
+permissions.selectText.1=Sélectionnez le PDF pour modifier les autorisations :
+permissions.selectText.2=Autorisations à définir :
permissions.selectText.3=Employer l'assemblage du document
permissions.selectText.4=Employer l'extraction de contenu
permissions.selectText.5=Employer l'extraction pour l'accessibilité
-permissions.selectText.6=Employer de remplir le formulaire
-permissions.selectText.7=Employer la modification
-permissions.selectText.8=Employer la modification des annotations
-permissions.selectText.9=Employer l'impression
-permissions.selectText.10=Emp�cher l'impression de diff�rents formats
+permissions.selectText.6=Employer pour remplir le formulaire
+permissions.selectText.7=Employer pour la modification
+permissions.selectText.8=Employer pour la modification des annotations
+permissions.selectText.9=Employer pour l'impression
+permissions.selectText.10=Empêcher l'impression de différents formats
permissions.submit=Modificateur
#supprimer le mot de passe
@@ -276,29 +273,30 @@ removePassword.selectText.1=Sélectionnez le PDF à déchiffrer
removePassword.selectText.2=Mot de passe
removePassword.submit=Supprimer
-changeMetadata.title=Modifier les métadonnées
-changeMetadata.header=Modifier les métadonnées
-changeMetadata.selectText.1=Veuillez modifier les variables que vous souhaitez modifier
-changeMetadata.selectText.2=Supprimer toutes les métadonnées
-changeMetadata.selectText.3=Afficher les métadonnées personnalisées:
-changeMetadata.author=Auteur:
-changeMetadata.creationDate=Date de création (aaaa/MM/jj HH:mm:ss):
-changeMetadata.creator=Créateur:
-changeMetadata.keywords=Mots clés:
-changeMetadata.modDate=Date de modification (aaaa/MM/jj HH:mm:ss):
-changeMetadata.producer=Producteur:
-changeMetadata.subject=Objet:
-changeMetadata.title=Titre:
-changeMetadata.trapped=Piégé:
-changeMetadata.selectText.4=Autres métadonnées:
-changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisées
+#Change Metadata
+changeMetadata.title=Modifier les métadonnées
+changeMetadata.header=Modifier les métadonnées
+changeMetadata.selectText.1=Veuillez modifier les variables que vous souhaitez modifier.
+changeMetadata.selectText.2=Supprimer toutes les métadonnées.
+changeMetadata.selectText.3=Afficher les métadonnées personnalisées :
+changeMetadata.author=Auteur :
+changeMetadata.creationDate=Date de création (aaaa/MM/jj HH:mm:ss) :
+changeMetadata.creator=Créateur :
+changeMetadata.keywords=Mots clés :
+changeMetadata.modDate=Date de modification (aaaa/MM/jj HH:mm:ss) :
+changeMetadata.producer=Producteur :
+changeMetadata.subject=Objet :
+changeMetadata.title=Titre :
+changeMetadata.trapped=Piégé :
+changeMetadata.selectText.4=Autres métadonnées :
+changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisées
changeMetadata.submit=Modifier
-
+#XLS to PDF
xlsToPdf.title=Excel vers PDF
xlsToPdf.header=Excel en PDF
-xlsToPdf.selectText.1=Sélectionnez une feuille Excel XLS ou XLSX à convertir
-xlsToPdf.convert=convertir
+xlsToPdf.selectText.1=Sélectionnez une feuille Excel XLS ou XLSX à convertir.
+xlsToPdf.convert=Convertir
pdfToPDFA.title=PDF vers PDF/A
pdfToPDFA.header=PDF vers PDF/A
diff --git a/src/main/resources/templates/add-image.html b/src/main/resources/templates/add-image.html
index 8efc965b2..ee8d1e4e2 100644
--- a/src/main/resources/templates/add-image.html
+++ b/src/main/resources/templates/add-image.html
@@ -1,5 +1,5 @@
-
+