From 99c64c12ed8c324640592d44a6c342c605687114 Mon Sep 17 00:00:00 2001
From: Kcchouette
Date: Mon, 10 Mar 2025 21:04:12 +0000
Subject: [PATCH 001/124] Update french translation
---
frontend/src/i18n/fr.json | 79 +++++++++++++++++++++++----------------
1 file changed, 47 insertions(+), 32 deletions(-)
diff --git a/frontend/src/i18n/fr.json b/frontend/src/i18n/fr.json
index 30725641..17d98907 100644
--- a/frontend/src/i18n/fr.json
+++ b/frontend/src/i18n/fr.json
@@ -14,7 +14,7 @@
"file": "Fichier",
"folder": "Dossier",
"fullScreen": "Plein écran",
- "hideDotfiles": "Masquer les dotfiles",
+ "hideDotfiles": "Masquer les fichiers cachés",
"info": "Info",
"more": "Plus",
"move": "Déplacer",
@@ -22,15 +22,16 @@
"new": "Nouveau",
"next": "Suivant",
"ok": "OK",
- "permalink": "Obtenir un lien permanent",
+ "permalink": "Obtenir le lien permanent",
"previous": "Précédent",
+ "preview": "Prévisualiser",
"publish": "Publier",
"rename": "Renommer",
"replace": "Remplacer",
- "reportIssue": "Rapport d'erreur",
+ "reportIssue": "Signaler un problème",
"save": "Enregistrer",
- "schedule": "Fixer la date",
- "search": "Chercher",
+ "schedule": "Planifier",
+ "search": "Rechercher",
"select": "Sélectionner",
"selectMultiple": "Sélection multiple",
"share": "Partager",
@@ -40,18 +41,22 @@
"toggleSidebar": "Afficher/Masquer la barre latérale",
"update": "Mettre à jour",
"upload": "Importer",
- "openFile": "Ouvrir le fichier"
+ "openFile": "Ouvrir le fichier",
+ "discardChanges": "Annuler"
},
"download": {
"downloadFile": "Télécharger le fichier",
"downloadFolder": "Télécharger le dossier",
- "downloadSelected": "Télécharger la selection"
+ "downloadSelected": "Télécharger la sélection"
+ },
+ "upload": {
+ "abortUpload": "Êtes-vous sûr de vouloir annuler ?"
},
"errors": {
"forbidden": "Vous n'avez pas la permission d'accéder à cela.",
"internal": "Aïe ! Quelque chose s'est mal passé.",
"notFound": "Impossible d'accéder à cet emplacement.",
- "connection": "Le serveur n'est pas accessible."
+ "connection": "Le serveur est injoignable."
},
"files": {
"body": "Corps",
@@ -61,15 +66,15 @@
"home": "Accueil",
"lastModified": "Dernière modification",
"loading": "Chargement...",
- "lonely": "Il semble qu'il n'y ait rien par ici...",
- "metadata": "Metadonnées",
+ "lonely": "C'est un peu désert ici...",
+ "metadata": "Métadonnées",
"multipleSelectionEnabled": "Sélection multiple activée",
"name": "Nom",
"size": "Taille",
- "sortByLastModified": "Trier par date de dernière modification",
+ "sortByLastModified": "Trier par date de modification",
"sortByName": "Trier par nom",
"sortBySize": "Trier par taille",
- "noPreview": "Il n'y a pas de prévisualisation pour ce fichier."
+ "noPreview": "L'aperçu n'est pas disponible pour ce fichier."
},
"help": {
"click": "Sélectionner un élément",
@@ -105,6 +110,7 @@
"deleteMessageMultiple": "Êtes-vous sûr de vouloir supprimer ces {count} élément(s) ?",
"deleteMessageSingle": "Êtes-vous sûr de vouloir supprimer cet élément ?",
"deleteMessageShare": "Êtes-vous sûr de vouloir supprimer ce partage ({path}) ?",
+ "deleteUser": "Êtes-vous sûr de vouloir supprimer cet utilisateur ?",
"deleteTitle": "Supprimer",
"displayName": "Nom :",
"download": "Télécharger",
@@ -125,31 +131,33 @@
"rename": "Renommer",
"renameMessage": "Nouveau nom pour",
"replace": "Remplacer",
- "replaceMessage": "Un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n",
- "schedule": "Fixer la date",
+ "replaceMessage": "L'un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n",
+ "schedule": "Planifier",
"scheduleMessage": "Choisissez une date pour planifier la publication de ce post",
"show": "Montrer",
"size": "Taille",
"upload": "Importer",
"uploadFiles": "Importation de {files} fichiers...",
- "uploadMessage": "Séléctionnez une option d'import.",
- "optionalPassword": "Mot de passe optionnel"
+ "uploadMessage": "Sélectionnez une option d'import.",
+ "optionalPassword": "Mot de passe optionnel",
+ "resolution": "Résolution",
+ "discardEditorChanges": "Êtes-vous sûr de vouloir annuler les modifications apportées ?"
},
"search": {
"images": "Images",
"music": "Musique",
"pdf": "PDF",
- "pressToSearch": "Appuyez du entrée pour chercher...",
+ "pressToSearch": "Appuyez sur Entrée pour rechercher...",
"search": "Recherche en cours...",
- "typeToSearch": "Écrivez pour chercher...",
+ "typeToSearch": "Écrivez pour rechercher...",
"types": "Types",
- "video": "Video"
+ "video": "Vidéo"
},
"settings": {
"admin": "Admin",
"administrator": "Administrateur",
"allowCommands": "Exécuter des commandes",
- "allowEdit": "Editer, renommer et supprimer des fichiers ou des dossiers",
+ "allowEdit": "Éditer, renommer et supprimer des fichiers ou des dossiers",
"allowNew": "Créer de nouveaux fichiers et dossiers",
"allowPublish": "Publier de nouveaux posts et pages",
"allowSignup": "Autoriser les utilisateurs à s'inscrire",
@@ -158,32 +166,39 @@
"brandingDirectoryPath": "Chemin du dossier d'image de marque",
"brandingHelp": "Vous pouvez personnaliser l'apparence de votre instance de File Browser en changeant son nom, en remplaçant le logo, en ajoutant des styles personnalisés et même en désactivant les liens externes vers GitHub.\nPour plus d'informations sur la personnalisation de l'image de marque, veuillez consulter la {0}.",
"changePassword": "Modifier le mot de passe",
- "commandRunner": "Command runner",
- "commandRunnerHelp": "Ici, vous pouvez définir les commandes qui sont exécutées pour les événements nommés précédemments. Vous devez en écrire une par ligne. Les variables d'environnement {0} et {1} seront disponibles, {0} étant relatif à {1}. Pour plus d'informations sur cette fonctionnalité et les variables d'environnement disponibles, veuillez lire la {2}.",
+ "commandRunner": "Exécuteur de commandes",
+ "commandRunnerHelp": "Ici, vous pouvez définir les commandes qui seront exécutées lors des événements nommés précédemments. Vous devez en écrire une par ligne. Les variables d'environnement {0} et {1} seront disponibles, {0} étant relatif à {1}. Pour plus d'informations sur cette fonctionnalité et les variables d'environnement disponibles, veuillez lire la {2}.",
"commandsUpdated": "Commandes mises à jour !",
"createUserDir": "Créer automatiquement un dossier pour l'utilisateur",
+ "tusUploads": "Uploads segmentés",
+ "tusUploadsHelp": "File Browser prend en charge les uploads segmentés afin de permettre une gestion efficace, fiable et reprenable sur des réseaux instables.",
+ "tusUploadsChunkSize": "Taille maximale autorisée par segment (les uploads directs seront utilisés pour les fichiers plus petits). Vous pouvez entrer un entier en octets ou une chaîne telle que 10MB, 1GB, etc.",
+ "tusUploadsRetryCount": "Nombre de tentatives en cas d'échec d'un segment.",
+ "userHomeBasePath": "Chemin de base pour les répertoires personnels des utilisateurs",
+ "userScopeGenerationPlaceholder": "Le périmètre sera généré automatiquement",
+ "createUserHomeDirectory": "Créer le répertoire personnel de l'utilisateur",
"customStylesheet": "Feuille de style personnalisée",
"defaultUserDescription": "Paramètres par défaut pour les nouveaux utilisateurs.",
"disableExternalLinks": "Désactiver les liens externes (sauf la documentation)",
- "disableUsedDiskPercentage": "Disable used disk percentage graph",
+ "disableUsedDiskPercentage": "Désactiver le graphique de pourcentage d'utilisation du disque",
"documentation": "documentation",
"examples": "Exemples",
"executeOnShell": "Exécuter dans le shell",
"executeOnShellDescription": "Par défaut, File Browser exécute les commandes en appelant directement leurs binaires. Si vous voulez les exécuter sur un shell à la place (comme Bash ou PowerShell), vous pouvez le définir ici avec les arguments et les drapeaux requis. S'il est défini, la commande que vous exécutez sera ajoutée en tant qu'argument. Cela s'applique à la fois aux commandes utilisateur et aux crochets d'événements.",
"globalRules": "Il s'agit d'un ensemble global de règles d'autorisation et d'interdiction. Elles s'appliquent à tous les utilisateurs. Vous pouvez définir des règles spécifiques sur les paramètres de chaque utilisateur pour remplacer celles-ci.",
- "globalSettings": "Paramètres généraux",
+ "globalSettings": "Paramètres globaux",
"hideDotfiles": "Cacher les fichiers de configuration utilisateur (dotfiles)",
- "insertPath": "Insérez le chemin",
- "insertRegex": "Insérez l'expression régulière",
+ "insertPath": "Insérer le chemin",
+ "insertRegex": "Insérer une expression régulière",
"instanceName": "Nom de l'instance",
"language": "Langue",
"lockPassword": "Empêcher l'utilisateur de changer son mot de passe",
"newPassword": "Votre nouveau mot de passe",
"newPasswordConfirm": "Confirmation du nouveau mot de passe",
- "newUser": "Nouvel Utilisateur",
+ "newUser": "Nouvel utilisateur",
"password": "Mot de passe",
"passwordUpdated": "Mot de passe mis à jour !",
- "path": "",
+ "path": "Chemin",
"perm": {
"create": "Créer des fichiers et des dossiers",
"delete": "Supprimer des fichiers et des dossiers",
@@ -209,14 +224,14 @@
"singleClick": "Utiliser un simple clic pour ouvrir les fichiers et les dossiers",
"themes": {
"dark": "Sombre",
- "light": "Lumineux",
+ "light": "Clair",
"title": "Thème"
},
"user": "Utilisateur",
"userCommands": "Commandes",
- "userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :",
+ "userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :\n",
"userCreated": "Utilisateur créé !",
- "userDefaults": "User default settings",
+ "userDefaults": "Paramètres par défaut de l'utilisateur",
"userDeleted": "Utilisateur supprimé !",
"userManagement": "Gestion des utilisateurs",
"userUpdated": "Utilisateur mis à jour !",
@@ -237,7 +252,7 @@
"siteSettings": "Paramètres du site"
},
"success": {
- "linkCopied": "Lien copié!"
+ "linkCopied": "Lien copié !"
},
"time": {
"days": "Jours",
From 5355629fd1e7bd85ee3222fca22da899ba23ea95 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 19 May 2025 13:49:42 +0200
Subject: [PATCH 002/124] build(deps-dev): bump vite from 6.0.11 to 6.1.6 in
/frontend (#3886)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.11 to 6.1.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.1.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.1.6/packages/vite)
---
updated-dependencies:
- dependency-name: vite
dependency-version: 6.1.6
dependency-type: direct:development
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
frontend/package.json | 2 +-
frontend/pnpm-lock.yaml | 283 +++++++++++++++++++++++-----------------
2 files changed, 161 insertions(+), 124 deletions(-)
diff --git a/frontend/package.json b/frontend/package.json
index 86c2f88d..78951c4b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -69,7 +69,7 @@
"postcss": "^8.5.1",
"prettier": "^3.4.2",
"terser": "^5.37.0",
- "vite": "^6.0.11",
+ "vite": "^6.1.6",
"vite-plugin-compression2": "^1.0.0",
"vue-tsc": "^2.2.0"
},
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index 2cf5b620..d9d19749 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -98,7 +98,7 @@ importers:
devDependencies:
'@intlify/unplugin-vue-i18n':
specifier: ^6.0.3
- version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.32.0)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
+ version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.40.1)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
'@playwright/test':
specifier: ^1.50.0
version: 1.50.0
@@ -116,10 +116,10 @@ importers:
version: 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0)(typescript@5.6.3))(eslint@9.19.0)(typescript@5.6.3)
'@vitejs/plugin-legacy':
specifier: ^6.0.0
- version: 6.0.0(terser@5.37.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
+ version: 6.0.0(terser@5.37.0)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
'@vitejs/plugin-vue':
specifier: ^5.0.4
- version: 5.2.1(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))
+ version: 5.2.1(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))
'@vue/eslint-config-prettier':
specifier: ^10.2.0
version: 10.2.0(eslint@9.19.0)(prettier@3.4.2)
@@ -157,11 +157,11 @@ importers:
specifier: ^5.37.0
version: 5.37.0
vite:
- specifier: ^6.0.11
- version: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
+ specifier: ^6.1.6
+ version: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
vite-plugin-compression2:
specifier: ^1.0.0
- version: 1.3.3(rollup@4.32.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
+ version: 1.3.3(rollup@4.40.1)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
vue-tsc:
specifier: ^2.2.0
version: 2.2.0(typescript@5.6.3)
@@ -934,22 +934,26 @@ packages:
resolution: {integrity: sha512-nmG512G8QOABsserleechwHGZxzKSAlggGf9hQX0nltvSwyKNVuB/4o6iFeG2OnjXK253r8p8eSDOZf8PgFdWw==}
engines: {node: '>= 16'}
- '@intlify/message-compiler@11.0.0-rc.1':
- resolution: {integrity: sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==}
- engines: {node: '>= 16'}
-
'@intlify/message-compiler@11.1.2':
resolution: {integrity: sha512-T/xbNDzi+Yv0Qn2Dfz2CWCAJiwNgU5d95EhhAEf4YmOgjCKktpfpiUSmLcBvK1CtLpPQ85AMMQk/2NCcXnNj1g==}
engines: {node: '>= 16'}
- '@intlify/shared@11.0.0-rc.1':
- resolution: {integrity: sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==}
+ '@intlify/message-compiler@12.0.0-alpha.2':
+ resolution: {integrity: sha512-PD9C+oQbb7BF52hec0+vLnScaFkvnfX+R7zSbODYuRo/E2niAtGmHd0wPvEMsDhf9Z9b8f/qyDsVeZnD/ya9Ug==}
engines: {node: '>= 16'}
'@intlify/shared@11.1.2':
resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==}
engines: {node: '>= 16'}
+ '@intlify/shared@11.1.3':
+ resolution: {integrity: sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==}
+ engines: {node: '>= 16'}
+
+ '@intlify/shared@12.0.0-alpha.2':
+ resolution: {integrity: sha512-P2DULVX9nz3y8zKNqLw9Es1aAgQ1JGC+kgpx5q7yLmrnAKkPR5MybQWoEhxanefNJgUY5ehsgo+GKif59SrncA==}
+ engines: {node: '>= 16'}
+
'@intlify/unplugin-vue-i18n@6.0.3':
resolution: {integrity: sha512-9ZDjBlhUHtgjRl23TVcgfJttgu8cNepwVhWvOv3mUMRDAhjW0pur1mWKEUKr1I8PNwE4Gvv2IQ1xcl4RL0nG0g==}
engines: {node: '>= 18'}
@@ -1045,98 +1049,103 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.32.0':
- resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==}
+ '@rollup/rollup-android-arm-eabi@4.40.1':
+ resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.32.0':
- resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==}
+ '@rollup/rollup-android-arm64@4.40.1':
+ resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.32.0':
- resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==}
+ '@rollup/rollup-darwin-arm64@4.40.1':
+ resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.32.0':
- resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==}
+ '@rollup/rollup-darwin-x64@4.40.1':
+ resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.32.0':
- resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==}
+ '@rollup/rollup-freebsd-arm64@4.40.1':
+ resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.32.0':
- resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==}
+ '@rollup/rollup-freebsd-x64@4.40.1':
+ resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.32.0':
- resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
+ resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.32.0':
- resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==}
+ '@rollup/rollup-linux-arm-musleabihf@4.40.1':
+ resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.32.0':
- resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==}
+ '@rollup/rollup-linux-arm64-gnu@4.40.1':
+ resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.32.0':
- resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==}
+ '@rollup/rollup-linux-arm64-musl@4.40.1':
+ resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loongarch64-gnu@4.32.0':
- resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==}
+ '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
+ resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.32.0':
- resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
+ resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.32.0':
- resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==}
+ '@rollup/rollup-linux-riscv64-gnu@4.40.1':
+ resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.32.0':
- resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==}
+ '@rollup/rollup-linux-riscv64-musl@4.40.1':
+ resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.40.1':
+ resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.32.0':
- resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==}
+ '@rollup/rollup-linux-x64-gnu@4.40.1':
+ resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.32.0':
- resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==}
+ '@rollup/rollup-linux-x64-musl@4.40.1':
+ resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.32.0':
- resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==}
+ '@rollup/rollup-win32-arm64-msvc@4.40.1':
+ resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.32.0':
- resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==}
+ '@rollup/rollup-win32-ia32-msvc@4.40.1':
+ resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.32.0':
- resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==}
+ '@rollup/rollup-win32-x64-msvc@4.40.1':
+ resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==}
cpu: [x64]
os: [win32]
@@ -1146,6 +1155,9 @@ packages:
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/estree@1.0.7':
+ resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -2086,6 +2098,11 @@ packages:
engines: {node: '>=8', npm: '>=5'}
hasBin: true
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -2206,6 +2223,10 @@ packages:
resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
engines: {node: ^10 || ^12 || >=14}
+ postcss@8.5.3:
+ resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -2298,8 +2319,8 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rollup@4.32.0:
- resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==}
+ rollup@4.40.1:
+ resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -2540,8 +2561,8 @@ packages:
peerDependencies:
vite: ^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0
- vite@6.0.11:
- resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==}
+ vite@6.1.6:
+ resolution: {integrity: sha512-u+jokLMwHVFUoUkfL+m/1hzucejL2639g9QXcrRdtN3WPHfW7imI83V96Oh1R0xVZqDjvcgp+7S8bSQpdVlmPA==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
@@ -3578,8 +3599,8 @@ snapshots:
'@intlify/bundle-utils@10.0.0(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))':
dependencies:
- '@intlify/message-compiler': 11.0.0-rc.1
- '@intlify/shared': 11.0.0-rc.1
+ '@intlify/message-compiler': 12.0.0-alpha.2
+ '@intlify/shared': 12.0.0-alpha.2
acorn: 8.14.0
escodegen: 2.1.0
estree-walker: 2.0.2
@@ -3595,27 +3616,29 @@ snapshots:
'@intlify/message-compiler': 11.1.2
'@intlify/shared': 11.1.2
- '@intlify/message-compiler@11.0.0-rc.1':
- dependencies:
- '@intlify/shared': 11.0.0-rc.1
- source-map-js: 1.2.1
-
'@intlify/message-compiler@11.1.2':
dependencies:
'@intlify/shared': 11.1.2
source-map-js: 1.2.1
- '@intlify/shared@11.0.0-rc.1': {}
+ '@intlify/message-compiler@12.0.0-alpha.2':
+ dependencies:
+ '@intlify/shared': 12.0.0-alpha.2
+ source-map-js: 1.2.1
'@intlify/shared@11.1.2': {}
- '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.32.0)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
+ '@intlify/shared@11.1.3': {}
+
+ '@intlify/shared@12.0.0-alpha.2': {}
+
+ '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.40.1)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0)
'@intlify/bundle-utils': 10.0.0(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))
- '@intlify/shared': 11.1.2
- '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
- '@rollup/pluginutils': 5.1.4(rollup@4.32.0)
+ '@intlify/shared': 11.1.3
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.3)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
+ '@rollup/pluginutils': 5.1.4(rollup@4.40.1)
'@typescript-eslint/scope-manager': 8.21.0
'@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3)
debug: 4.4.0
@@ -3636,11 +3659,11 @@ snapshots:
- supports-color
- typescript
- '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.3)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
dependencies:
'@babel/parser': 7.26.7
optionalDependencies:
- '@intlify/shared': 11.1.2
+ '@intlify/shared': 11.1.3
'@vue/compiler-dom': 3.5.13
vue: 3.5.13(typescript@5.6.3)
vue-i18n: 11.1.2(vue@3.5.13(typescript@5.6.3))
@@ -3691,83 +3714,88 @@ snapshots:
dependencies:
playwright: 1.50.0
- '@rollup/pluginutils@5.1.3(rollup@4.32.0)':
+ '@rollup/pluginutils@5.1.3(rollup@4.40.1)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.32.0
+ rollup: 4.40.1
- '@rollup/pluginutils@5.1.4(rollup@4.32.0)':
+ '@rollup/pluginutils@5.1.4(rollup@4.40.1)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.32.0
+ rollup: 4.40.1
- '@rollup/rollup-android-arm-eabi@4.32.0':
+ '@rollup/rollup-android-arm-eabi@4.40.1':
optional: true
- '@rollup/rollup-android-arm64@4.32.0':
+ '@rollup/rollup-android-arm64@4.40.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.32.0':
+ '@rollup/rollup-darwin-arm64@4.40.1':
optional: true
- '@rollup/rollup-darwin-x64@4.32.0':
+ '@rollup/rollup-darwin-x64@4.40.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.32.0':
+ '@rollup/rollup-freebsd-arm64@4.40.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.32.0':
+ '@rollup/rollup-freebsd-x64@4.40.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.32.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.40.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.32.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.40.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.32.0':
+ '@rollup/rollup-linux-arm64-gnu@4.40.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.32.0':
+ '@rollup/rollup-linux-arm64-musl@4.40.1':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.32.0':
+ '@rollup/rollup-linux-loongarch64-gnu@4.40.1':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.32.0':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.32.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.40.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.32.0':
+ '@rollup/rollup-linux-riscv64-musl@4.40.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.32.0':
+ '@rollup/rollup-linux-s390x-gnu@4.40.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.32.0':
+ '@rollup/rollup-linux-x64-gnu@4.40.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.32.0':
+ '@rollup/rollup-linux-x64-musl@4.40.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.32.0':
+ '@rollup/rollup-win32-arm64-msvc@4.40.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.32.0':
+ '@rollup/rollup-win32-ia32-msvc@4.40.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.40.1':
optional: true
'@tsconfig/node22@22.0.0': {}
'@types/estree@1.0.6': {}
+ '@types/estree@1.0.7': {}
+
'@types/json-schema@7.0.15': {}
'@types/localforage@0.0.34':
@@ -3885,7 +3913,7 @@ snapshots:
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-legacy@6.0.0(terser@5.37.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))':
+ '@vitejs/plugin-legacy@6.0.0(terser@5.37.0)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))':
dependencies:
'@babel/core': 7.26.0
'@babel/preset-env': 7.26.0(@babel/core@7.26.0)
@@ -3896,13 +3924,13 @@ snapshots:
regenerator-runtime: 0.14.1
systemjs: 6.15.1
terser: 5.37.0
- vite: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
+ vite: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.2.1(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))':
+ '@vitejs/plugin-vue@5.2.1(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))':
dependencies:
- vite: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
+ vite: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
vue: 3.5.13(typescript@5.6.3)
'@volar/language-core@2.4.11':
@@ -3939,7 +3967,7 @@ snapshots:
'@vue/shared': 3.5.13
estree-walker: 2.0.2
magic-string: 0.30.14
- postcss: 8.5.1
+ postcss: 8.5.3
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.13':
@@ -4805,6 +4833,8 @@ snapshots:
'@babel/runtime': 7.26.7
global: 4.4.0
+ nanoid@3.3.11: {}
+
nanoid@3.3.8: {}
natural-compare@1.4.0: {}
@@ -4911,6 +4941,12 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ postcss@8.5.3:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
prelude-ls@1.2.1: {}
prettier-linter-helpers@1.0.0:
@@ -4994,29 +5030,30 @@ snapshots:
reusify@1.0.4: {}
- rollup@4.32.0:
+ rollup@4.40.1:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.7
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.32.0
- '@rollup/rollup-android-arm64': 4.32.0
- '@rollup/rollup-darwin-arm64': 4.32.0
- '@rollup/rollup-darwin-x64': 4.32.0
- '@rollup/rollup-freebsd-arm64': 4.32.0
- '@rollup/rollup-freebsd-x64': 4.32.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.32.0
- '@rollup/rollup-linux-arm-musleabihf': 4.32.0
- '@rollup/rollup-linux-arm64-gnu': 4.32.0
- '@rollup/rollup-linux-arm64-musl': 4.32.0
- '@rollup/rollup-linux-loongarch64-gnu': 4.32.0
- '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0
- '@rollup/rollup-linux-riscv64-gnu': 4.32.0
- '@rollup/rollup-linux-s390x-gnu': 4.32.0
- '@rollup/rollup-linux-x64-gnu': 4.32.0
- '@rollup/rollup-linux-x64-musl': 4.32.0
- '@rollup/rollup-win32-arm64-msvc': 4.32.0
- '@rollup/rollup-win32-ia32-msvc': 4.32.0
- '@rollup/rollup-win32-x64-msvc': 4.32.0
+ '@rollup/rollup-android-arm-eabi': 4.40.1
+ '@rollup/rollup-android-arm64': 4.40.1
+ '@rollup/rollup-darwin-arm64': 4.40.1
+ '@rollup/rollup-darwin-x64': 4.40.1
+ '@rollup/rollup-freebsd-arm64': 4.40.1
+ '@rollup/rollup-freebsd-x64': 4.40.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.40.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.40.1
+ '@rollup/rollup-linux-arm64-gnu': 4.40.1
+ '@rollup/rollup-linux-arm64-musl': 4.40.1
+ '@rollup/rollup-linux-loongarch64-gnu': 4.40.1
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.40.1
+ '@rollup/rollup-linux-riscv64-musl': 4.40.1
+ '@rollup/rollup-linux-s390x-gnu': 4.40.1
+ '@rollup/rollup-linux-x64-gnu': 4.40.1
+ '@rollup/rollup-linux-x64-musl': 4.40.1
+ '@rollup/rollup-win32-arm64-msvc': 4.40.1
+ '@rollup/rollup-win32-ia32-msvc': 4.40.1
+ '@rollup/rollup-win32-x64-msvc': 4.40.1
fsevents: 2.3.3
rrweb-cssom@0.8.0: {}
@@ -5238,19 +5275,19 @@ snapshots:
dependencies:
global: 4.4.0
- vite-plugin-compression2@1.3.3(rollup@4.32.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)):
+ vite-plugin-compression2@1.3.3(rollup@4.40.1)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)):
dependencies:
- '@rollup/pluginutils': 5.1.3(rollup@4.32.0)
+ '@rollup/pluginutils': 5.1.3(rollup@4.40.1)
tar-mini: 0.2.0
- vite: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
+ vite: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
transitivePeerDependencies:
- rollup
- vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0):
+ vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0):
dependencies:
esbuild: 0.24.2
- postcss: 8.5.1
- rollup: 4.32.0
+ postcss: 8.5.3
+ rollup: 4.40.1
optionalDependencies:
'@types/node': 22.10.10
fsevents: 2.3.3
From 0ba9505a19cb369653fc9f8260dc02fcc6587629 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 19 May 2025 14:24:09 +0200
Subject: [PATCH 003/124] build(deps): bump golang.org/x/crypto from 0.31.0 to
0.35.0 (#3865)
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.31.0 to 0.35.0.
- [Commits](https://github.com/golang/crypto/compare/v0.31.0...v0.35.0)
---
updated-dependencies:
- dependency-name: golang.org/x/crypto
dependency-version: 0.35.0
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
go.mod | 8 ++++----
go.sum | 16 ++++++++--------
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/go.mod b/go.mod
index a58d5c24..ee77461e 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
module github.com/filebrowser/filebrowser/v2
-go 1.23
+go 1.23.0
require (
github.com/asdine/storm/v3 v3.2.1
@@ -24,9 +24,9 @@ require (
github.com/stretchr/testify v1.9.0
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
go.etcd.io/bbolt v1.3.11
- golang.org/x/crypto v0.31.0
+ golang.org/x/crypto v0.35.0
golang.org/x/image v0.19.0
- golang.org/x/text v0.21.0
+ golang.org/x/text v0.22.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v2 v2.4.0
)
@@ -65,7 +65,7 @@ require (
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect
golang.org/x/net v0.33.0 // indirect
- golang.org/x/sys v0.28.0 // indirect
+ golang.org/x/sys v0.30.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/go.sum b/go.sum
index 4e451c05..73634413 100644
--- a/go.sum
+++ b/go.sum
@@ -174,8 +174,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
+golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
+golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -192,8 +192,8 @@ golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
+golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -204,14 +204,14 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
+golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
From cfea84fd5e7ec9c1d2366293e5db12baaa4e3a81 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 19 May 2025 12:27:04 +0000
Subject: [PATCH 004/124] build(deps): bump golang.org/x/net from 0.33.0 to
0.38.0 (#3869)
---
go.mod | 8 ++++----
go.sum | 20 ++++++++++----------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/go.mod b/go.mod
index ee77461e..be75c5ae 100644
--- a/go.mod
+++ b/go.mod
@@ -24,9 +24,9 @@ require (
github.com/stretchr/testify v1.9.0
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
go.etcd.io/bbolt v1.3.11
- golang.org/x/crypto v0.35.0
+ golang.org/x/crypto v0.36.0
golang.org/x/image v0.19.0
- golang.org/x/text v0.22.0
+ golang.org/x/text v0.23.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v2 v2.4.0
)
@@ -64,8 +64,8 @@ require (
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect
- golang.org/x/net v0.33.0 // indirect
- golang.org/x/sys v0.30.0 // indirect
+ golang.org/x/net v0.38.0 // indirect
+ golang.org/x/sys v0.31.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/go.sum b/go.sum
index 73634413..000afe76 100644
--- a/go.sum
+++ b/go.sum
@@ -174,8 +174,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
-golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
+golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
+golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -190,10 +190,10 @@ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
-golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
+golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
+golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
+golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -204,14 +204,14 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
-golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
-golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
+golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
From 495e731ee7e21a6d73f887c43d8b29c6e675d93b Mon Sep 17 00:00:00 2001
From: Matthaiks <3577122+Matthaiks@users.noreply.github.com>
Date: Mon, 3 Mar 2025 20:54:49 +0100
Subject: [PATCH 005/124] Update Polish translation
---
frontend/src/i18n/pl.json | 222 +++++++++++++++++++++-----------------
1 file changed, 126 insertions(+), 96 deletions(-)
diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json
index 9fcd4afa..0ddfbf56 100644
--- a/frontend/src/i18n/pl.json
+++ b/frontend/src/i18n/pl.json
@@ -3,133 +3,153 @@
"cancel": "Anuluj",
"clear": "Wyczyść",
"close": "Zamknij",
+ "continue": "Kontynuuj",
"copy": "Kopiuj",
"copyFile": "Kopiuj plik",
- "copyToClipboard": "kopiuj do schowka",
+ "copyToClipboard": "Kopiuj do schowka",
+ "copyDownloadLinkToClipboard": "Kopiuj link pobierania do schowka",
"create": "Utwórz",
"delete": "Usuń",
"download": "Pobierz",
- "hideDotfiles": "",
- "info": "Informacja",
- "more": "Więce",
+ "file": "Plik",
+ "folder": "Folder",
+ "fullScreen": "Przełącz tryb pełnoekranowy",
+ "hideDotfiles": "Ukryj pliki poprzedzone kropką",
+ "info": "Informacje",
+ "more": "Więcej",
"move": "Przenieś",
"moveFile": "Przenieś plik",
"new": "Nowy",
"next": "Następny",
"ok": "OK",
- "permalink": "Uzyskaj link bezpośredni (permalink)",
+ "permalink": "Uzyskaj stały link",
"previous": "Poprzedni",
+ "preview": "Podgląd",
"publish": "Opublikuj",
"rename": "Zmień nazwę",
"replace": "Zamień",
"reportIssue": "Zgłoś problem",
"save": "Zapisz",
- "schedule": "Grafik",
+ "schedule": "Harmonogram",
"search": "Szukaj",
"select": "Wybierz",
- "selectMultiple": "Zaznacz wiele",
+ "selectMultiple": "Wybierz wiele",
"share": "Udostępnij",
- "shell": "Pokaż/ukryj powłokę",
+ "shell": "Przełącz powłokę",
+ "submit": "Prześlij",
"switchView": "Zmień widok",
- "toggleSidebar": "Pokaż/ukryj panel boczny",
+ "toggleSidebar": "Przełącz pasek boczny",
"update": "Aktualizuj",
- "upload": "Wgraj"
+ "upload": "Wyślij",
+ "openFile": "Otwórz plik",
+ "discardChanges": "Odrzuć"
},
"download": {
"downloadFile": "Pobierz plik",
"downloadFolder": "Pobierz folder",
- "downloadSelected": "Pobierz zaznaczone"
+ "downloadSelected": "Pobierz wybrane"
+ },
+ "upload": {
+ "abortUpload": "Czy na pewno chcesz przerwać?"
},
"errors": {
- "forbidden": "Nie posiadasz uprawnień potrzebnych, by uzyskać do tego dostęp.",
+ "forbidden": "Nie masz zezwolenia na dostęp do tego.",
"internal": "Pojawił się poważny problem.",
- "notFound": "Ten adres nie jest poprawny."
+ "notFound": "Ta lokalizacja jest nieosiągalna.",
+ "connection": "Serwer jest nieosiągalny."
},
"files": {
- "body": "Body",
- "closePreview": "Zamknij poprzednie",
+ "body": "Ciało",
+ "closePreview": "Zamknij podgląd",
"files": "Pliki",
"folders": "Foldery",
- "home": "Katalog domowy",
- "lastModified": "Ostatnio modyfikowane",
+ "home": "Główny",
+ "lastModified": "Ostatnio zmodyfikowano",
"loading": "Ładowanie...",
- "lonely": "Smutno gdy tak pusto...",
+ "lonely": "Smutno, gdy tak pusto...",
"metadata": "Metadane",
- "multipleSelectionEnabled": "Zaznaczenie wielu włączone",
+ "multipleSelectionEnabled": "Włączono wybór wielokrotny",
"name": "Nazwa",
"size": "Rozmiar",
- "sortByLastModified": "Sortuj wg. daty modyfikacji",
- "sortByName": "Sortuj wg. nazwy",
- "sortBySize": "Sortuj wg. rozmiaru"
+ "sortByLastModified": "Sortuj wg ostatniej modyfikacji",
+ "sortByName": "Sortuj wg nazwy",
+ "sortBySize": "Sortuj wg rozmiaru",
+ "noPreview": "Podgląd tego pliku jest niedostępny."
},
"help": {
- "click": "wybierz plik lub foler",
+ "click": "wybierz plik lub folder",
"ctrl": {
"click": "wybierz wiele plików lub folderów",
"f": "otwórz wyszukiwarkę",
"s": "pobierz aktywny plik lub folder"
},
- "del": "usuń zaznaczone",
+ "del": "usuń wybrane elementy",
"doubleClick": "otwórz plik lub folder",
- "esc": "wyczyść zaznaczenie i/lub zamknij okno z powiadomieniem",
- "f1": "ta informacja",
+ "esc": "wyczyść wybór i/lub zamknij monit",
+ "f1": "te informacje",
"f2": "zmień nazwę pliku",
"help": "Pomoc"
},
"login": {
"createAnAccount": "Utwórz konto",
- "loginInstead": "Takie konto już istnieje",
+ "loginInstead": "Mam już konto",
"password": "Hasło",
"passwordConfirm": "Potwierdzenie hasła",
- "passwordsDontMatch": "Hasła różnią się",
+ "passwordsDontMatch": "Hasła nie pasują do siebie",
"signup": "Rejestracja",
- "submit": "Logowanie",
+ "submit": "Zaloguj",
"username": "Nazwa użytkownika",
- "usernameTaken": "Nazwa użytkownika już zajęta",
+ "usernameTaken": "Ta nazwa jest zajęta",
"wrongCredentials": "Błędne dane logowania"
},
"permanent": "Permanentny",
"prompts": {
"copy": "Kopiuj",
- "copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki",
- "currentlyNavigating": "Obecnie przeglądasz:",
- "deleteMessageMultiple": "Czy jesteś pewien że chcesz usunąć {count} plik(ów)?",
- "deleteMessageSingle": "Czy jesteś pewien, że chcesz usunąć ten plik/folder?",
+ "copyMessage": "Wybierz lokalizację docelową:",
+ "currentlyNavigating": "Aktualnie poruszasz się po:",
+ "deleteMessageMultiple": "Czy na pewno chcesz usunąć pliki: {count}?",
+ "deleteMessageSingle": "Czy na pewno chcesz usunąć ten plik/folder?",
+ "deleteMessageShare": "Czy na pewno chcesz usunąć ten udział ({path})?",
+ "deleteUser": "Czy na pewno chcesz usunąć tego użytkownika?",
"deleteTitle": "Usuń pliki",
- "displayName": "Wyświetlana Nazwa:",
+ "displayName": "Wyświetlana nazwa:",
"download": "Pobierz pliki",
- "downloadMessage": "Wybierz format, jaki chesz pobrać.",
- "error": "Pojawił się nieznany błąd",
- "fileInfo": "Informacje o pliku",
- "filesSelected": "{count} plików zostało zaznaczonych.",
- "lastModified": "Osatnio Zmodyfikowane",
+ "downloadMessage": "Wybierz format, w którym chcesz pobrać.",
+ "error": "Pojawił się jakiś błąd",
+ "fileInfo": "Informacje o pliku",
+ "filesSelected": "Wybrane pliki: {count}",
+ "lastModified": "Ostatnio zmodyfikowano",
"move": "Przenieś",
- "moveMessage": "Wybierz nową lokalizację dla swoich plik(ów)/folder(ów):",
- "newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.",
+ "moveMessage": "Wybierz nową lokalizację dla swoich plików/folderów:",
+ "newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.",
"newDir": "Nowy folder",
- "newDirMessage": "Podaj nazwę tworzonego folderu.",
+ "newDirMessage": "Nazwij nowy folder.",
"newFile": "Nowy plik",
- "newFileMessage": "Podaj nazwętworzonego pliku.",
- "numberDirs": "Ilość katalogów",
- "numberFiles": "Ilość plików",
+ "newFileMessage": "Nazwij nowy plik.",
+ "numberDirs": "Liczba folderów",
+ "numberFiles": "Liczba plików",
"rename": "Zmień nazwę",
"renameMessage": "Podaj nową nazwę dla",
"replace": "Zamień",
- "replaceMessage": "Jednen z plików który próbujesz wrzucić próbje nadpisać plik o tej samej nazwie. Czy chcesz nadpisać poprzedni plik?\n",
- "schedule": "Grafi",
- "scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.",
+ "replaceMessage": "Jeden z przesyłanych plików chce nadpisać istniejący plik o tej samej nazwie. Chcesz pominąć ten plik i kontynuować przesyłanie reszty plików, czy nadpisać istniejący plik?\n",
+ "schedule": "Grafik",
+ "scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.",
"show": "Pokaż",
"size": "Rozmiar",
- "upload": "Prześlij",
- "uploadMessage": "Proszę wybrać metodę przesyłania"
+ "upload": "Wyślij",
+ "uploadFiles": "Wysyłam pliki: {files}...",
+ "uploadMessage": "Wybierz opcję przesyłania.",
+ "optionalPassword": "Opcjonalne hasło",
+ "resolution": "Rozdzielczość",
+ "discardEditorChanges": "Czy na pewno chcesz odrzucić wprowadzone zmiany?"
},
"search": {
- "images": "Zdjęcia",
+ "images": "Obrazy",
"music": "Muzyka",
"pdf": "PDF",
- "pressToSearch": "Wciśnij enter, aby wyszukać...",
+ "pressToSearch": "Naciśnij Enter, aby wyszukać...",
"search": "Szukaj...",
- "typeToSearch": "Zacznij pisać, aby wyszukać...",
+ "typeToSearch": "Typ plików do wyszukania...",
"types": "Typy",
"video": "Wideo"
},
@@ -137,70 +157,80 @@
"admin": "Admin",
"administrator": "Administrator",
"allowCommands": "Wykonaj polecenie",
- "allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów",
+ "allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów",
"allowNew": "Tworzenie nowych plików lub folderów",
- "allowPublish": "Tworzenie nowych wpisów i stron",
- "allowSignup": "Zezwól na rejestrację użytkowników",
- "avoidChanges": "(pozostaw puste aby nie zosatało zmienione)",
- "branding": "Branding",
- "brandingDirectoryPath": "Folder brandingowy",
- "brandingHelp": "Możesz dostosować wygląd i doznania użytkownika swojej instancji File Browser poprzez zmianę jej nazwy, zmianę logo, dodanie własnych stylów, a nawet wyłączyć linki zewnętrzne do GitHuba.\nW celu pozyskania większej ilości informacji nt. osobistego brandingu, zapoznaj się z {0}.",
- "changePassword": "Zmień Hasło",
+ "allowPublish": "Tworzenie nowych wpisów i stron",
+ "allowSignup": "Pozwól użytkownikom na rejestrację",
+ "avoidChanges": "(pozostaw puste, aby uniknąć zmian)",
+ "branding": "Personalizacja",
+ "brandingDirectoryPath": "Ścieżka do folderu personalizacji",
+ "brandingHelp": "Możesz zmodyfikować wygląd instancji File Browser poprzez zmianę nazwy, logo, dodanie własnych stylów graficznych, a nawet usunięcia linków do serwisu GitHub. Więcej informacji o modyfikacji wyglądu znajdziesz w {0}.",
+ "changePassword": "Zmień hasło",
"commandRunner": "Narzędzie do wykonywania poleceń",
- "commandRunnerHelp": "Tu możesz ustawić komendy, które będą wykonywane przy danych zdarzeniach. Musisz wpisywać po jednej na linjkę. Zmienne środowiskowe {0} i {1} będą dostępne, gdzie {0} jest względne wobec {1}. Więcej informacji o tej funkcji i dostępnych zmiennych środowiskowych znajdziesz tutaj: {2}.",
+ "commandRunnerHelp": "Tu możesz ustawić polecenia, które będą wykonywane przy danych zdarzeniach. Musisz wpisywać po jednym na wiersz. Zmienne środowiskowe {0} i {1} będą dostępne, gdzie {0} jest względne wobec {1}. Więcej informacji o tej funkcji i dostępnych zmiennych środowiskowych znajdziesz w {2}.",
"commandsUpdated": "Polecenie zaktualizowane!",
- "createUserDir": "Automatycznie utwórz katalog domowy użytkownika podczas dodania nowego użytkownika",
- "customStylesheet": "Własny arkusz stylów",
- "defaultUserDescription": "Oto domyślne ustawienia dla nowych użytkowników.",
- "disableExternalLinks": "Wyłącz linki zewnętrzne (z wyjątkiem dokumentacji)",
- "disableUsedDiskPercentage": "Disable used disk percentage graph",
- "documentation": "dokumentacja",
+ "createUserDir": "Automatycznie twórz katalog domowy podczas dodawania użytkownika",
+ "tusUploads": "Przesyłanie we fragmentach",
+ "tusUploadsHelp": "File Browser wspiera przesyłanie plików we fragmentach, co pozwala na proces przesyłania, który jest wydajny, pewny i możliwy do wznowienia nawet w sieciach o wątpliwej stabilności przesyłu danych.",
+ "tusUploadsChunkSize": "Oznacza maksymalny rozmiar przesyłanych plików (dla mniejszych plików użyte zostanie przesyłanie bezpośrednie). Możesz ustawić tę wartość zarówno zapisaną samymi cyframi w bajtach, jak i podać ją w formie skróconej, np. poprzez 10MB, 1GB itp.",
+ "tusUploadsRetryCount": "Liczba prób ponowienia transferu w przypadku wystapienia problemu z przesyłem.",
+ "userHomeBasePath": "Ścieżka podstawowa dla katalogów domowych użytkowników",
+ "userScopeGenerationPlaceholder": "Zakres zostanie wygenerowany automatycznie",
+ "createUserHomeDirectory": "Utwórz katalog domowy użytkownika",
+ "customStylesheet": "Własny arkusz stylu",
+ "defaultUserDescription": "To są domyślne ustawienia dla nowych użytkowników.",
+ "disableExternalLinks": "Wyłącz linki zewnętrzne (z wyjątkiem dokumentacji)",
+ "disableUsedDiskPercentage": "Wyłącz wykres procentowy używanego dysku",
+ "documentation": "dokumentacji",
"examples": "Przykłady",
- "executeOnShell": "Wykonaj w powłoce",
- "executeOnShellDescription": "Domyślnie File Browser wykonuje polecenia wywołując ich pliki binarne bezpośrednio. Jesli preferujesz wykonywanie ich w powłoce (jak np. Bash czy PowerShell), możesz zdefiniować to tutaj wraz z wymaganymi flagami i argumentami. Jeśli to ustawienie jest aktywne, polecenie które wykonarz zostanie dodane jako argument. Stosuje się to zarówno do poleceń użytkownika jak i zaczepów zdarzeń.",
- "globalRules": "To jest globalne zestawienie reguł zezwalających i zabraniających. Stosują się one do każdego użytkownika. Możesz zdefiniować indywidualne zasady w ustawieniach każdego użytkownika, by zignorować te reguły.",
- "globalSettings": "Ustawienia Globalne",
- "hideDotfiles": "Ukryj ukryte pliki",
+ "executeOnShell": "Wykonaj w powłoce",
+ "executeOnShellDescription": "Domyślnie File Browser wykonuje polecenia poprzez bezpośrednie uruchomienie odpowiednich plików binarnych. Jeśli chcesz uruchamiać polecenia z poziomu powłoki (np. Bash lub PowerShell), możesz zdefiniować je tutaj, z wykorzystaniem odpowiednich argumentów i flag. Gdy się na to zdecydujesz, wykonywane polecenie będzie załączone jako argument. Tyczy się to tak poleceń użytkownika, jak i zaczepów zdarzeń.",
+ "globalRules": "Globalny zestaw reguł zezwalających i zakazujących. Dotyczą każdego użytkownika. Aby zastąpić ustawienia globalne, możesz zdefiniować określone reguły indywidualnie dla każdego użytkownika.",
+ "globalSettings": "Ustawienia globalne",
+ "hideDotfiles": "Ukryj pliki poprzedzone kropką",
"insertPath": "Wstaw ścieżkę",
"insertRegex": "Wstaw wyrażenie regularne",
"instanceName": "Nazwa instancji",
"language": "Język",
"lockPassword": "Zablokuj użytkownikowi możliwość zmiany hasła",
- "newPassword": "Twoje nowe hasło",
- "newPasswordConfirm": "Potwierdź swoje hasło",
- "newUser": "Nowy Użytkownik",
+ "newPassword": "Nowe hasło",
+ "newPasswordConfirm": "Potwierdź nowe hasło",
+ "newUser": "Nowy użytkownik",
"password": "Hasło",
- "passwordUpdated": "Hasło zostało zapisane!",
+ "passwordUpdated": "Hasło zostało zaktualizowane!",
"path": "Ścieżka",
"perm": {
- "create": "Tworzenie plików i katalogów",
- "delete": "Usuwanie plików i katalogów",
+ "create": "Tworzenie plików i folderów",
+ "delete": "Usuwanie plików i folderów",
"download": "Pobieranie",
"execute": "Wykonywanie poleceń",
- "modify": "Edycja plików",
- "rename": "Zmiana nazw lub przenoszenie plików i katalogów",
+ "modify": "Edytowanie plików",
+ "rename": "Zmienianie nazwy lub przenoszenie plików i katalogów",
"share": "Udostępnianie plików"
},
"permissions": "Uprawnienia",
- "permissionsHelp": "Możesz uczynić użytkownika administratorem, lub wybrać uprawnienia indywidualnie. Jeśli zaznaczysz opcję \"Administrator\", wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n",
+ "permissionsHelp": "Możesz ustawić użytkownika jako administratora lub wybrać uprawnienia indywidualnie. Jeśli wybierzesz „Administrator”, wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n",
"profileSettings": "Twój profil",
- "ruleExample1": "uniemożliwia dostęp do któregokolwiek z ukrytych plików (takich jak .git, .gitignore) w każdym folderze.\n",
- "ruleExample2": "blokuje dostęp do pliku Caddyfile w głównym katalogu zakresu.",
+ "ruleExample1": "uniemożliwia dostęp do plików poprzedzonych kropką (takich jak .git, .gitignore) we wszystkich folderach.\n",
+ "ruleExample2": "blokuje dostęp do pliku o nazwie Caddyfile w katalogu głównym zakresu.",
"rules": "Uprawnienia",
- "rulesHelp": "Tu możesz zdefiniować zestawienie reguł zezwalających i zabraniających dla tego konkretnego użytkownika. Zablokowane pliki nie będą widoczne na listach i nie będą dostępne dla użytkownika. Wspierane są wyrażenia regularne i ścieżki względne wobec zakresu użytkownika.\n",
+ "rulesHelp": "Tutaj możesz zdefiniować zestaw reguł zezwalających i zakazujących dla tego użytkownika. Zablokowane pliki nie pojawią się na listach i nie będą dostępne dla użytkownika. Obsługujemy wyrażenia regularne i ścieżki względne w stosunku do zakresu użytkownika.\n",
"scope": "Zakres",
- "settingsUpdated": "Uprawnienia Zapisane!",
+ "setDateFormat": "Ustaw dokładny format daty",
+ "settingsUpdated": "Ustawienia zaktualizowane!",
"shareDuration": "Okres udostępniania",
"shareManagement": "Zarządzanie udostępnianiem",
- "singleClick": "Pojedyncze kliknięcie",
+ "shareDeleted": "Udostępnienie usunięte!",
+ "singleClick": "Używaj pojedynczych kliknięć, aby otwierać pliki i foldery",
"themes": {
- "dark": "ciemny",
- "light": "jasny",
- "title": "Motywy"
+ "default": "Domyślny systemowy",
+ "dark": "Ciemny",
+ "light": "Jasny",
+ "title": "Motyw"
},
"user": "Użytkownik",
"userCommands": "Polecenia",
- "userCommandsHelp": "Lista oddzielonych spacjami poleceń dostępnych dla tego użytkownika. Przykład:\n",
+ "userCommandsHelp": "Oddzielona spacjami lista z dostępnymi poleceniami dla tego użytkownika. Przykład:\n",
"userCreated": "Użytkownik zapisany!",
"userDefaults": "Domyślne ustawienia użytkownika",
"userDeleted": "Użytkownik usunięty!",
@@ -211,8 +241,8 @@
},
"sidebar": {
"help": "Pomoc",
- "hugoNew": "Hugo New",
- "login": "Login",
+ "hugoNew": "Nowy Hugo",
+ "login": "Zaloguj",
"logout": "Wyloguj",
"myFiles": "Moje pliki",
"newFile": "Nowy plik",
@@ -220,10 +250,10 @@
"preview": "Podgląd",
"settings": "Ustawienia",
"signup": "Rejestracja",
- "siteSettings": "Ustawienia Strony"
+ "siteSettings": "Ustawienia strony"
},
"success": {
- "linkCopied": "Link Skopiowany!"
+ "linkCopied": "Link skopiowany!"
},
"time": {
"days": "Dni",
From 6d55cc59f750656956a65c94a7d5b5766a900f8f Mon Sep 17 00:00:00 2001
From: Matthaiks <3577122+Matthaiks@users.noreply.github.com>
Date: Mon, 21 Apr 2025 15:02:53 +0200
Subject: [PATCH 006/124] chore: Update Polish translation
---
frontend/src/i18n/pl.json | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json
index 0ddfbf56..e621d7fa 100644
--- a/frontend/src/i18n/pl.json
+++ b/frontend/src/i18n/pl.json
@@ -32,8 +32,8 @@
"save": "Zapisz",
"schedule": "Harmonogram",
"search": "Szukaj",
- "select": "Wybierz",
- "selectMultiple": "Wybierz wiele",
+ "select": "Zaznacz",
+ "selectMultiple": "Zaznacz wiele",
"share": "Udostępnij",
"shell": "Przełącz powłokę",
"submit": "Prześlij",
@@ -47,7 +47,7 @@
"download": {
"downloadFile": "Pobierz plik",
"downloadFolder": "Pobierz folder",
- "downloadSelected": "Pobierz wybrane"
+ "downloadSelected": "Pobierz zaznaczone"
},
"upload": {
"abortUpload": "Czy na pewno chcesz przerwać?"
@@ -59,7 +59,7 @@
"connection": "Serwer jest nieosiągalny."
},
"files": {
- "body": "Ciało",
+ "body": "Zawartość",
"closePreview": "Zamknij podgląd",
"files": "Pliki",
"folders": "Foldery",
@@ -68,7 +68,7 @@
"loading": "Ładowanie...",
"lonely": "Smutno, gdy tak pusto...",
"metadata": "Metadane",
- "multipleSelectionEnabled": "Włączono wybór wielokrotny",
+ "multipleSelectionEnabled": "Włączono zaznaczenie wielokrotne",
"name": "Nazwa",
"size": "Rozmiar",
"sortByLastModified": "Sortuj wg ostatniej modyfikacji",
@@ -77,15 +77,15 @@
"noPreview": "Podgląd tego pliku jest niedostępny."
},
"help": {
- "click": "wybierz plik lub folder",
+ "click": "zaznacz plik lub folder",
"ctrl": {
- "click": "wybierz wiele plików lub folderów",
+ "click": "zaznacz wiele plików lub folderów",
"f": "otwórz wyszukiwarkę",
"s": "pobierz aktywny plik lub folder"
},
- "del": "usuń wybrane elementy",
+ "del": "usuń zaznaczone elementy",
"doubleClick": "otwórz plik lub folder",
- "esc": "wyczyść wybór i/lub zamknij monit",
+ "esc": "wyczyść zaznaczenie i/lub zamknij monit",
"f1": "te informacje",
"f2": "zmień nazwę pliku",
"help": "Pomoc"
@@ -99,7 +99,7 @@
"signup": "Rejestracja",
"submit": "Zaloguj",
"username": "Nazwa użytkownika",
- "usernameTaken": "Ta nazwa jest zajęta",
+ "usernameTaken": "Ta nazwa użytkownika jest zajęta",
"wrongCredentials": "Błędne dane logowania"
},
"permanent": "Permanentny",
@@ -117,7 +117,7 @@
"downloadMessage": "Wybierz format, w którym chcesz pobrać.",
"error": "Pojawił się jakiś błąd",
"fileInfo": "Informacje o pliku",
- "filesSelected": "Wybrane pliki: {count}",
+ "filesSelected": "Zaznaczone pliki: {count}",
"lastModified": "Ostatnio zmodyfikowano",
"move": "Przenieś",
"moveMessage": "Wybierz nową lokalizację dla swoich plików/folderów:",
From a46acba5f92ee044661880d6ae349e289d984328 Mon Sep 17 00:00:00 2001
From: bo0tzz
Date: Thu, 16 Jan 2025 11:59:19 +0100
Subject: [PATCH 007/124] fix: generate random admin password on quick setup
This should help mitigate issues like #3646
---
cmd/root.go | 7 ++++++-
users/password.go | 17 +++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/cmd/root.go b/cmd/root.go
index 59329c5c..b421f771 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -378,7 +378,12 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) {
password := getParam(flags, "password")
if password == "" {
- password, err = users.HashPwd("admin")
+ pwd, err := users.RandomPwd()
+ checkErr(err)
+
+ log.Println("Generated random admin password for quick setup:", pwd)
+
+ password, err = users.HashPwd(pwd)
checkErr(err)
}
diff --git a/users/password.go b/users/password.go
index d7ef250a..3f5e1c6e 100644
--- a/users/password.go
+++ b/users/password.go
@@ -1,9 +1,14 @@
package users
import (
+ "crypto/rand"
+ "encoding/base64"
"golang.org/x/crypto/bcrypt"
)
+// randomPasswordBytesCount is chosen to fit in a base64 string without padding
+const randomPasswordBytesCount = 9
+
// HashPwd hashes a password.
func HashPwd(password string) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
@@ -15,3 +20,15 @@ func CheckPwd(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
+
+func RandomPwd() (string, error) {
+ randomPasswordBytes := make([]byte, randomPasswordBytesCount)
+ var _, err = rand.Read(randomPasswordBytes)
+ if err != nil {
+ return "", err
+ }
+
+ // This is done purely to make the password human-readable
+ var randomPasswordString = base64.URLEncoding.EncodeToString(randomPasswordBytes)
+ return randomPasswordString, nil
+}
From 54b91b8ff0b8ee1f02f72425ab97d27a5d942fc3 Mon Sep 17 00:00:00 2001
From: bo0tzz
Date: Tue, 21 Jan 2025 14:45:54 +0100
Subject: [PATCH 008/124] fix: imports lint
---
users/password.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/users/password.go b/users/password.go
index 3f5e1c6e..d8cd7fbc 100644
--- a/users/password.go
+++ b/users/password.go
@@ -3,6 +3,7 @@ package users
import (
"crypto/rand"
"encoding/base64"
+
"golang.org/x/crypto/bcrypt"
)
From c606a01a2d20932fb32ee896234d57631f8c47e4 Mon Sep 17 00:00:00 2001
From: bo0tzz
Date: Tue, 21 Jan 2025 14:51:01 +0100
Subject: [PATCH 009/124] fix: err shadowing lint
---
cmd/root.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/cmd/root.go b/cmd/root.go
index b421f771..125f443d 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -378,7 +378,8 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) {
password := getParam(flags, "password")
if password == "" {
- pwd, err := users.RandomPwd()
+ var pwd string
+ pwd, err = users.RandomPwd()
checkErr(err)
log.Println("Generated random admin password for quick setup:", pwd)
From b883e287a05d4585cd9bde510fad4ef1c4e31a7d Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Wed, 4 Jun 2025 18:58:48 +0200
Subject: [PATCH 010/124] chore: migrate transifex settings
---
.tx/config | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/.tx/config b/.tx/config
index f7363d04..b62f63ac 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,10 +1,13 @@
[main]
-host = https://www.transifex.com
-lang_map = pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be, sv_SE: sv-se, cz-CS: cz_cs
+host = https://www.transifex.com
+lang_map = sv_SE: sv-se, cz-CS: cz_cs, pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be
+
+[o:file-browser:p:file-browser:r:file-browser]
+file_filter = frontend/src/i18n/.json
+source_file = frontend/src/i18n/en.json
+source_lang = en
+type = KEYVALUEJSON
+minimum_perc = 50
+replace_edited_strings = false
+keep_translations = false
-[file-browser.file-browser]
-file_filter = frontend/src/i18n/.json
-minimum_perc = 50
-source_file = frontend/src/i18n/en.json
-source_lang = en
-type = KEYVALUEJSON
From 48f894740fb0903e3bbf66ed3a38c4f171b654c0 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Wed, 4 Jun 2025 19:08:43 +0200
Subject: [PATCH 011/124] chore: remove stale bot
---
.github/workflows/stale.yml | 24 ------------------------
1 file changed, 24 deletions(-)
delete mode 100644 .github/workflows/stale.yml
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
deleted file mode 100644
index 45a7e9e5..00000000
--- a/.github/workflows/stale.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: 'Close stale issues and PRs'
-permissions:
- issues: write
- pull-requests: write
-
-on:
- schedule:
- - cron: '30 1 * * *'
-
-jobs:
- stale:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/stale@v9
- with:
- stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
- close-pr-message: 'This PR was closed because it has been stalled for 5 days with no activity.'
- stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
- close-issue-message: 'This issue was closed because it has been stalled for 5 days with no activity.'
- days-before-stale: 30
- days-before-close: 5
- exempt-issue-labels: 'feature ☘,enhancement ⚙,bug 🐞'
- exempt-pr-labels: 'need-help,wip'
- operations-per-run: 100
\ No newline at end of file
From 71a8f5662c207e3cd4ee714a5b5a961121f510cd Mon Sep 17 00:00:00 2001
From: Simon
Date: Thu, 5 Jun 2025 15:53:29 +0200
Subject: [PATCH 012/124] fix: set videojs locale (#3742)
Co-authored-by: Oleg Lobanov
---
frontend/src/components/files/VideoPlayer.vue | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/frontend/src/components/files/VideoPlayer.vue b/frontend/src/components/files/VideoPlayer.vue
index a1947f90..ac38b6d1 100644
--- a/frontend/src/components/files/VideoPlayer.vue
+++ b/frontend/src/components/files/VideoPlayer.vue
@@ -62,7 +62,8 @@ const initVideoPlayer = async () => {
const languagePack = await (
languageImports[lang] || languageImports.en
)?.();
- videojs.addLanguage("videoPlayerLocal", languagePack.default);
+ const code = languageImports[lang] ? lang : "en";
+ videojs.addLanguage(code, languagePack.default);
sourceType.value = "";
//
@@ -70,7 +71,7 @@ const initVideoPlayer = async () => {
const srcOpt = { sources: { src: props.source, type: sourceType.value } };
//Supporting localized language display.
- const langOpt = { language: "videoPlayerLocal" };
+ const langOpt = { language: code };
// support for playback at different speeds.
const playbackRatesOpt = { playbackRates: [0.5, 1, 1.5, 2, 2.5, 3] };
const options = getOptions(
From f4a8420bf3c1b677a2aef1a9c28fd9ac8ffec61d Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Wed, 11 Jun 2025 17:44:18 +0200
Subject: [PATCH 013/124] docs: add maintenance warning to readme
---
README.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 23afecfc..8ba29bb6 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,10 @@
+> [!WARNING]
+>
+> This project is currently not under active maintenance and is looking for maintainers. Please check [issue #4890](https://github.com/filebrowser/filebrowser/issues/4890).
+

[](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml)
@@ -14,9 +18,9 @@ filebrowser provides a file managing interface within a specified directory and
## Demo
-url: https://demo.filebrowser.org/
+URL: https://demo.filebrowser.org/
-credentials: `demo`/`demo`
+Credentials: `demo`/`demo`
## Features
From e82e2392a4ff6bac513a9de4fecca0573dd9fc89 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Wed, 11 Jun 2025 17:53:43 +0200
Subject: [PATCH 014/124] chore: update Go dependencies
---
go.mod | 59 +++++++++++-------------
go.sum | 138 ++++++++++++++++++++++++++-------------------------------
2 files changed, 91 insertions(+), 106 deletions(-)
diff --git a/go.mod b/go.mod
index be75c5ae..b6a574d2 100644
--- a/go.mod
+++ b/go.mod
@@ -4,69 +4,64 @@ go 1.23.0
require (
github.com/asdine/storm/v3 v3.2.1
- github.com/asticode/go-astisub v0.26.2
+ github.com/asticode/go-astisub v0.34.0
github.com/disintegration/imaging v1.6.2
github.com/dsoprea/go-exif/v3 v3.0.1
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568
- github.com/golang-jwt/jwt/v4 v4.5.1
+ github.com/golang-jwt/jwt/v4 v4.5.2
github.com/gorilla/mux v1.8.1
github.com/gorilla/websocket v1.5.3
github.com/maruel/natural v1.1.1
github.com/marusama/semaphore/v2 v2.5.0
github.com/mholt/archiver/v3 v3.5.1
github.com/mitchellh/go-homedir v1.1.0
- github.com/pelletier/go-toml/v2 v2.2.3
+ github.com/pelletier/go-toml/v2 v2.2.4
github.com/shirou/gopsutil/v3 v3.24.5
- github.com/spf13/afero v1.11.0
- github.com/spf13/cobra v1.8.1
- github.com/spf13/pflag v1.0.5
- github.com/spf13/viper v1.19.0
- github.com/stretchr/testify v1.9.0
+ github.com/spf13/afero v1.14.0
+ github.com/spf13/cobra v1.9.1
+ github.com/spf13/pflag v1.0.6
+ github.com/spf13/viper v1.20.1
+ github.com/stretchr/testify v1.10.0
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
- go.etcd.io/bbolt v1.3.11
- golang.org/x/crypto v0.36.0
- golang.org/x/image v0.19.0
- golang.org/x/text v0.23.0
+ go.etcd.io/bbolt v1.4.1
+ golang.org/x/crypto v0.39.0
+ golang.org/x/image v0.28.0
+ golang.org/x/text v0.26.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v2 v2.4.0
)
require (
- github.com/andybalholm/brotli v1.1.0 // indirect
- github.com/asticode/go-astikit v0.42.0 // indirect
+ github.com/andybalholm/brotli v1.1.1 // indirect
+ github.com/asticode/go-astikit v0.55.0 // indirect
github.com/asticode/go-astits v1.13.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect
github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect
github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 // indirect
- github.com/fsnotify/fsnotify v1.7.0 // indirect
+ github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/go-errors/errors v1.5.1 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/golang/geo v0.0.0-20230421003525-6adc56603217 // indirect
- github.com/golang/snappy v0.0.4 // indirect
- github.com/hashicorp/hcl v1.0.0 // indirect
+ github.com/go-ole/go-ole v1.3.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
+ github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 // indirect
+ github.com/golang/snappy v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/klauspost/compress v1.17.7 // indirect
+ github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/pgzip v1.2.6 // indirect
- github.com/magiconair/properties v1.8.7 // indirect
- github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/nwaples/rardecode v1.1.3 // indirect
- github.com/pierrec/lz4/v4 v4.1.21 // indirect
+ github.com/pierrec/lz4/v4 v4.1.22 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/sagikazarmark/locafero v0.4.0 // indirect
- github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
+ github.com/sagikazarmark/locafero v0.9.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
- github.com/spf13/cast v1.6.0 // indirect
+ github.com/spf13/cast v1.9.2 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
- github.com/ulikunitz/xz v0.5.11 // indirect
+ github.com/ulikunitz/xz v0.5.12 // indirect
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect
- golang.org/x/net v0.38.0 // indirect
- golang.org/x/sys v0.31.0 // indirect
+ golang.org/x/net v0.41.0 // indirect
+ golang.org/x/sys v0.33.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
- gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index 000afe76..b98d8ecb 100644
--- a/go.sum
+++ b/go.sum
@@ -3,20 +3,20 @@ github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863 h1:BRrxwOZBolJN4gIwvZMJY1tzqBvQgpaZiQRuIDD40jM=
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM=
github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
-github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
-github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
+github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
+github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
github.com/asdine/storm/v3 v3.2.1 h1:I5AqhkPK6nBZ/qJXySdI7ot5BlXSZ7qvDY1zAn5ZJac=
github.com/asdine/storm/v3 v3.2.1/go.mod h1:LEpXwGt4pIqrE/XcTvCnZHT5MgZCV6Ub9q7yQzOFWr0=
github.com/asticode/go-astikit v0.20.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0=
github.com/asticode/go-astikit v0.30.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0=
-github.com/asticode/go-astikit v0.42.0 h1:pnir/2KLUSr0527Tv908iAH6EGYYrYta132vvjXsH5w=
-github.com/asticode/go-astikit v0.42.0/go.mod h1:h4ly7idim1tNhaVkdVBeXQZEE3L0xblP7fCWbgwipF0=
-github.com/asticode/go-astisub v0.26.2 h1:cdEXcm+SUSmYCEPTQYbbfCECnmQoIFfH6pF8wDJhfVo=
-github.com/asticode/go-astisub v0.26.2/go.mod h1:WTkuSzFB+Bp7wezuSf2Oxulj5A8zu2zLRVFf6bIFQK8=
+github.com/asticode/go-astikit v0.55.0 h1:jdR6djfjAF2SwtFu1hzwkenCRejzOZUREsr3xPAPHeg=
+github.com/asticode/go-astikit v0.55.0/go.mod h1:fV43j20UZYfXzP9oBn33udkvCvDvCDhzjVqoLFuuYZE=
+github.com/asticode/go-astisub v0.34.0 h1:owKNj0A9pc7YVW/rNy2MJZ1mf0L8DTdklZVfyZDhTWI=
+github.com/asticode/go-astisub v0.34.0/go.mod h1:WTkuSzFB+Bp7wezuSf2Oxulj5A8zu2zLRVFf6bIFQK8=
github.com/asticode/go-astits v1.8.0/go.mod h1:DkOWmBNQpnr9mv24KfZjq4JawCFX1FCqjLVGvO0DygQ=
github.com/asticode/go-astits v1.13.0 h1:XOgkaadfZODnyZRR5Y0/DWkA9vrkLLPLeeOvDwfKZ1c=
github.com/asticode/go-astits v1.13.0/go.mod h1:QSHmknZ51pf6KJdHKZHJTLlMegIrhega3LPWz3ND/iI=
-github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -47,48 +47,48 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjr
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
-github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
-github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
+github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
-github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
+github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
+github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
+github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
+github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
-github.com/golang/geo v0.0.0-20230421003525-6adc56603217 h1:HKlyj6in2JV6wVkmQ4XmG/EIm+SCYlPZ+V4GWit7Z+I=
-github.com/golang/geo v0.0.0-20230421003525-6adc56603217/go.mod h1:8wI0hitZ3a1IxZfeH3/5I97CI8i5cLGsYe7xNhQGs9U=
+github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 h1:8mHyM6CCmj/DQAhHXJVTgdkg/6hAH71N7qGEF+t4Bzg=
+github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492/go.mod h1:Vaw7L5b+xa3Rj4/pRtrQkymn3lSBRB/NAEdbF9YEVLA=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
+github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
-github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
-github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
-github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
+github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
@@ -101,8 +101,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
-github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo=
github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg=
github.com/marusama/semaphore/v2 v2.5.0 h1:o/1QJD9DBYOWRnDhPwDVAXQn6mQYD0gZaS1Tpx6DJGM=
@@ -111,76 +109,72 @@ github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Cl
github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc=
github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
-github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
-github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
+github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
+github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
-github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
-github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
+github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/profile v1.4.0/go.mod h1:NWz/XGvpEW1FyYQ7fCx4dqYBLlfTcE+A9FLAkNKqjFE=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
+github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
+github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
-github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
-github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
-github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
+github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k=
+github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk=
github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
-github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
-github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
-github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
-github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
-github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
-github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
-github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
+github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
+github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
+github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE=
+github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
+github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
+github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4=
+github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce h1:fb190+cK2Xz/dvi9Hv8eCYJYvIGUTN2/KLq1pT6CjEc=
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4=
github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
-github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
-github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
+github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
+github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
+github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
+github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
-go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0=
-go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I=
+go.etcd.io/bbolt v1.4.1 h1:5mOV+HWjIPLEAlUGMsveaUvK2+byZMFOzojoi7bh7uI=
+go.etcd.io/bbolt v1.4.1/go.mod h1:c8zu2BnXWTu2XM4XcICtbGSl9cFwsXtcf9zLt2OncM8=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
-golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
-golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
-golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
+golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
+golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ=
-golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys=
+golang.org/x/image v0.28.0 h1:gdem5JW1OLS4FbkWgLO+7ZeFzYtL3xClb97GaUzYMFE=
+golang.org/x/image v0.28.0/go.mod h1:GUJYXtnGKEUgggyzh+Vxt+AviiCcyiwpsl8iQ8MvwGY=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20191105084925-a882066a44e0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -190,10 +184,10 @@ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
-golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
-golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
-golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
+golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
+golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
+golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -204,27 +198,23 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
-golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
+golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
-golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
+golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
+golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
-google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
-google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
-google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
-gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From abbf203bdd2ba1cd7eed823129872d44aa5b8c08 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Fri, 13 Jun 2025 12:02:32 +0200
Subject: [PATCH 015/124] chore: updated readme and templates
---
.github/ISSUE_TEMPLATE/bug_report.md | 22 ------------
.github/ISSUE_TEMPLATE/bug_report.yml | 43 +++++++++++++++++++++++
.github/ISSUE_TEMPLATE/config.yml | 5 +++
.github/ISSUE_TEMPLATE/feature_request.md | 16 ---------
README.md | 17 ++++++---
5 files changed, 61 insertions(+), 42 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
create mode 100644 .github/ISSUE_TEMPLATE/config.yml
delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index f026f3ce..00000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
----
-
-**Description**
-
-
-**Expected behaviour**
-
-
-**What is happening instead?**
-
-
-**Additional context**
-
-
-**How to reproduce?**
-
-
-**Files**
-
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 00000000..b5e1e3e1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,43 @@
+name: Bug Report
+description: Report a bug in FileBrowser.
+labels: [bug, triage]
+body:
+ - type: checkboxes
+ attributes:
+ label: Checklist
+ description: Please verify that you've followed these steps
+ options:
+ - label: This is a bug report, not a question.
+ required: true
+ - label: I have searched on the [issue tracker](https://github.com/filebrowser/filebrowser/issues?q=is%3Aissue) for my bug.
+ required: true
+ - label: I am running the latest [FileBrowser version](https://github.com/filebrowser/filebrowser/releases) or have an issue updating.
+ required: true
+ - type: textarea
+ id: version
+ attributes:
+ label: Version
+ render: Text
+ description: |
+ Enter the version of FileBrowser you are using.
+ - type: textarea
+ attributes:
+ label: Description
+ description: |
+ A clear and concise description of what the issue is about. What are you trying to do?
+ - type: textarea
+ attributes:
+ label: What did you expect to happen?
+ - type: textarea
+ attributes:
+ label: What actually happened?
+ - type: textarea
+ attributes:
+ label: Reproduction Steps
+ description: |
+ Tell us how to reproduce this issue. How can someone who is starting from scratch reproduce this behavior as minimally as possible?
+ - type: textarea
+ attributes:
+ label: Files
+ description: |
+ A list of relevant files for this issue. Large files can be uploaded one-by-one or in a tarball/zipfile.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000..b712a879
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: GitHub Discussions
+ url: https://github.com/filebrowser/filebrowser/discussions
+ about: Please ask questions and discuss features here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 4bdb0367..00000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
----
-
-**Is your feature request related to a problem? Please describe.**
-
-
-**Describe the solution you'd like**
-
-
-**Describe alternatives you've considered**
-
-
-**Additional context**
-
diff --git a/README.md b/README.md
index 8ba29bb6..d49de48e 100644
--- a/README.md
+++ b/README.md
@@ -2,10 +2,6 @@
-> [!WARNING]
->
-> This project is currently not under active maintenance and is looking for maintainers. Please check [issue #4890](https://github.com/filebrowser/filebrowser/issues/4890).
-

[](https://github.com/filebrowser/filebrowser/actions/workflows/main.yaml)
@@ -16,6 +12,19 @@
filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app.
+> [!WARNING]
+>
+> This project is currently on **maintenance-only** mode, and is looking for new maintainers. For more information, please read the [discussion #4906](https://github.com/filebrowser/filebrowser/discussions/4906). Therefore, please note the following:
+>
+> - It can take a while until someone gets back to you. Please be patient.
+> - [Issues][issues] are only being used to track bugs. Any unrelated issues will be converted into a [discussion][discussions].
+> - No new features will be implemented until further notice. The priority is on triaging issues and merge bug fixes.
+>
+> If you're interested in maintaining this project, please reach out via the discussion above.
+
+[issues]: https://github.com/filebrowser/filebrowser/issues
+[discussions]: https://github.com/filebrowser/filebrowser/discussions
+
## Demo
URL: https://demo.filebrowser.org/
From 31a326606d003002b64814fe4287b38510159431 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Fri, 13 Jun 2025 13:17:39 +0200
Subject: [PATCH 016/124] chore: updated readme and template
---
.github/PULL_REQUEST_TEMPLATE.md | 26 +++++++++++---------------
1 file changed, 11 insertions(+), 15 deletions(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 781aa085..873df269 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,19 +1,15 @@
-**Description**
-
+## Description
-:rotating_light: Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/).
+
-- [ ] DO make sure you are requesting to **pull a topic/feature/bugfix branch** (right side). Don't request your master!
-- [ ] DO make sure you are making a pull request against the **master branch** (left side). Also you should start *your branch* off *our master*.
-- [ ] DO make sure that File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md).
-- [ ] AVOID breaking the continuous integration build.
+## Additional Information
-**Further comments**
-
-:heart: Thank you!
--->
+## Checklist
+
+Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/).
+
+- [ ] I am aware the project is currently in maintenance-only mode. See [README](https://github.com/filebrowser/community/blob/master/README.md)
+- [ ] I am making a PR against the `master` branch.
+- [ ] I am sure File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md).
From 6d82a27f9a341453f0e213ccc0a66ba6a50620c4 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Sun, 15 Jun 2025 20:13:03 +0200
Subject: [PATCH 017/124] ci: add transifex.yml
---
transifex.yml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
create mode 100644 transifex.yml
diff --git a/transifex.yml b/transifex.yml
new file mode 100644
index 00000000..a3fc88f1
--- /dev/null
+++ b/transifex.yml
@@ -0,0 +1,16 @@
+filters:
+- filter_type: file
+ file_format: KEYVALUEJSON
+ source_language: en
+ source_file: frontend/src/i18n/en.json
+ translation_files_expression: 'frontend/src/i18n/.json'
+
+settings:
+ language_mapping:
+ sv_SE: sv-se
+ cz-CS: cz_cs
+ pt_BR: pt-br
+ zh_CN: zh-cn
+ zh_HK: zh-hk
+ zh_TW: zh-tw
+ nl_BE: nl-be
From b6b4fb5da7334bb43258dcf6cfd0a53912038ae7 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Sun, 15 Jun 2025 20:13:21 +0200
Subject: [PATCH 018/124] ci: remove manual .tx config
---
.tx/config | 13 -------------
1 file changed, 13 deletions(-)
delete mode 100644 .tx/config
diff --git a/.tx/config b/.tx/config
deleted file mode 100644
index b62f63ac..00000000
--- a/.tx/config
+++ /dev/null
@@ -1,13 +0,0 @@
-[main]
-host = https://www.transifex.com
-lang_map = sv_SE: sv-se, cz-CS: cz_cs, pt_BR: pt-br, zh_CN: zh-cn, zh_HK: zh-hk, zh_TW: zh-tw, nl_BE: nl-be
-
-[o:file-browser:p:file-browser:r:file-browser]
-file_filter = frontend/src/i18n/.json
-source_file = frontend/src/i18n/en.json
-source_lang = en
-type = KEYVALUEJSON
-minimum_perc = 50
-replace_edited_strings = false
-keep_translations = false
-
From 54a1ae0fa026e81837e9c3b4363763864243fa11 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Sun, 15 Jun 2025 20:48:01 +0200
Subject: [PATCH 019/124] chore: add only translated mode to transifex
---
transifex.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/transifex.yml b/transifex.yml
index a3fc88f1..64e2caba 100644
--- a/transifex.yml
+++ b/transifex.yml
@@ -4,6 +4,7 @@ filters:
source_language: en
source_file: frontend/src/i18n/en.json
translation_files_expression: 'frontend/src/i18n/.json'
+ mode: onlytranslated
settings:
language_mapping:
From 5daae69a6d9d379802f9835f8a2fb6b574b6e25d Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Sun, 15 Jun 2025 21:05:30 +0200
Subject: [PATCH 020/124] chore: revert only translated mode to transifex
---
transifex.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/transifex.yml b/transifex.yml
index 64e2caba..a3fc88f1 100644
--- a/transifex.yml
+++ b/transifex.yml
@@ -4,7 +4,6 @@ filters:
source_language: en
source_file: frontend/src/i18n/en.json
translation_files_expression: 'frontend/src/i18n/.json'
- mode: onlytranslated
settings:
language_mapping:
From a882fb6c85ab6ccc845ed0bf3908d8e5e60ce346 Mon Sep 17 00:00:00 2001
From: SOMA <94370762+dgstx@users.noreply.github.com>
Date: Mon, 16 Jun 2025 12:39:57 -0300
Subject: [PATCH 021/124] feat: improve pt-br translations with new keys and
refinements (#4903)
---
frontend/src/i18n/pt-br.json | 33 ++++++++++++++++++++++-----------
1 file changed, 22 insertions(+), 11 deletions(-)
diff --git a/frontend/src/i18n/pt-br.json b/frontend/src/i18n/pt-br.json
index 53d855d1..5e5b1116 100644
--- a/frontend/src/i18n/pt-br.json
+++ b/frontend/src/i18n/pt-br.json
@@ -38,13 +38,20 @@
"toggleSidebar": "Alternar barra lateral",
"update": "Atualizar",
"upload": "Enviar",
- "openFile": "Abrir"
+ "openFile": "Abrir",
+ "copyDownloadLinkToClipboard": "Copiar link de download para a área de transferência",
+ "fullScreen": "Alternar tela cheia",
+ "preview": "Pré-visualizar",
+ "discardChanges": "Descartar"
},
"download": {
"downloadFile": "Baixar arquivo",
"downloadFolder": "Baixar pasta",
"downloadSelected": "Baixar selecionado"
},
+ "upload": {
+ "abortUpload": "Tem certeza de que deseja abortar o upload?"
+ },
"errors": {
"forbidden": "Você não tem permissões para acessar isto.",
"internal": "Ops! Algum erro ocorreu.",
@@ -58,8 +65,8 @@
"folders": "Pastas",
"home": "Início",
"lastModified": "Última modificação",
- "loading": "Carregando. Aguarde, por favor.",
- "lonely": "Não existe nada aqui.",
+ "loading": "Carregando...",
+ "lonely": "Não há nada aqui...",
"metadata": "Metadados",
"multipleSelectionEnabled": "Seleção múltipla ativada",
"name": "Nome",
@@ -73,12 +80,12 @@
"click": "selecionar pasta ou arquivo",
"ctrl": {
"click": "selecionar várias pastas e arquivos",
- "f": "pesquisar",
+ "f": "abrir pesquisa",
"s": "salvar um arquivo ou baixar a pasta que você está"
},
"del": "apagar os arquivos selecionados",
"doubleClick": "abrir pasta ou arquivo",
- "esc": "limpar seleção e/ou fechar menu",
+ "esc": "limpar seleção e/ou fechar prompt",
"f1": "esta informação",
"f2": "renomear arquivo",
"help": "Ajuda"
@@ -123,7 +130,7 @@
"rename": "Renomear",
"renameMessage": "Insira um novo nome para",
"replace": "Substituir",
- "replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n",
+ "replaceMessage": "Um dos arquivos que você está tentando enviar possui um nome conflitante. Deseja pular este arquivo e continuar o envio ou substituir o existente?\n",
"schedule": "Agendar",
"scheduleMessage": "Escolha uma data para agendar a publicação deste post.",
"show": "Mostrar",
@@ -131,7 +138,10 @@
"upload": "Enviar",
"uploadFiles": "Enviando {files} arquivos...",
"uploadMessage": "Selecione uma opção para enviar.",
- "optionalPassword": "Senha opcional"
+ "optionalPassword": "Senha opcional",
+ "deleteUser": "Tem certeza de que deseja apagar este usuário?",
+ "resolution": "Resolução",
+ "discardEditorChanges": "Tem certeza de que deseja descartar as alterações feitas?"
},
"search": {
"images": "Imagens",
@@ -159,7 +169,7 @@
"commandRunner": "Execução de comandos",
"commandRunnerHelp": "Aqui você pode definir comandos que serão executados nos eventos descritos. Escreva um por linha. As variáveis de ambiente {0} e {1} estão disponíveis, sendo {0} relativo a {1}. Para mais informações sobre esta função e as variáveis de ambiente disponíveis, leia a {2}.",
"commandsUpdated": "Comandos atualizados!",
- "createUserDir": "Criar diretório Home para novos usuários",
+ "createUserDir": "Criar diretório Home do usuário automaticamente ao adicionar novo usuário",
"userHomeBasePath": "Caminho base para diretórios de usuários",
"userScopeGenerationPlaceholder": "O escopo será gerado automaticamente",
"createUserHomeDirectory": "Criar diretório Home de usuário",
@@ -184,7 +194,7 @@
"newUser": "Novo usuário",
"password": "Senha",
"passwordUpdated": "Senha atualizada!",
- "path": "",
+ "path": "Caminho",
"perm": {
"create": "Criar arquivos e diretórios",
"delete": "Apagar arquivos e diretórios",
@@ -209,6 +219,7 @@
"shareDeleted": "Compartilhamento apagado!",
"singleClick": "Usar clique único para abrir arquivos e diretórios",
"themes": {
+ "default": "Padrão do sistema",
"dark": "Escuro",
"light": "Claro",
"title": "Tema"
@@ -229,7 +240,7 @@
"hugoNew": "Hugo New",
"login": "Login",
"logout": "Sair",
- "myFiles": "Arquivos",
+ "myFiles": "Meus arquivos",
"newFile": "Novo arquivo",
"newFolder": "Nova pasta",
"preview": "Pré-visualizar",
@@ -245,6 +256,6 @@
"hours": "Horas",
"minutes": "Minutos",
"seconds": "Segundos",
- "unit": "Unidades de Tempo"
+ "unit": "Unidade de tempo"
}
}
From d9ebd65ffcf9b2166fec708d51849796d12b16e0 Mon Sep 17 00:00:00 2001
From: Dev_Nergis <136839304+DevNergis@users.noreply.github.com>
Date: Tue, 17 Jun 2025 01:35:50 +0900
Subject: [PATCH 022/124] feat: update translation ko.json (#3852)
---
frontend/src/i18n/ko.json | 248 +++++++++++++++++++++-----------------
1 file changed, 139 insertions(+), 109 deletions(-)
diff --git a/frontend/src/i18n/ko.json b/frontend/src/i18n/ko.json
index 722da2d2..6a6db23f 100644
--- a/frontend/src/i18n/ko.json
+++ b/frontend/src/i18n/ko.json
@@ -3,47 +3,60 @@
"cancel": "취소",
"clear": "지우기",
"close": "닫기",
+ "continue": "계속",
"copy": "복사",
"copyFile": "파일 복사",
- "copyToClipboard": "클립보드 복사",
+ "copyToClipboard": "클립보드에 복사",
+ "copyDownloadLinkToClipboard": "다운로드 링크 클립보드에 복사",
"create": "생성",
"delete": "삭제",
"download": "다운로드",
- "hideDotfiles": "숨김파일(dotfile)을 표시 안함",
+ "file": "파일",
+ "folder": "폴더",
+ "fullScreen": "전체 화면 전환",
+ "hideDotfiles": "숨김 파일 숨기기",
"info": "정보",
- "more": "더보기",
+ "more": "더 보기",
"move": "이동",
"moveFile": "파일 이동",
- "new": "신규",
+ "new": "새로 만들기",
"next": "다음",
"ok": "확인",
- "permalink": "링크 얻기",
+ "permalink": "영구 링크 받기",
"previous": "이전",
+ "preview": "미리보기",
"publish": "게시",
"rename": "이름 바꾸기",
- "replace": "대체",
- "reportIssue": "이슈 보내기",
+ "replace": "바꾸기",
+ "reportIssue": "문제 보고",
"save": "저장",
- "schedule": "일정",
+ "schedule": "예약",
"search": "검색",
"select": "선택",
"selectMultiple": "다중 선택",
"share": "공유",
- "shell": "쉘 전환",
+ "shell": "셸 전환",
+ "submit": "제출",
"switchView": "보기 전환",
"toggleSidebar": "사이드바 전환",
"update": "업데이트",
- "upload": "업로드"
+ "upload": "업로드",
+ "openFile": "파일 열기",
+ "discardChanges": "변경 사항 취소"
},
"download": {
"downloadFile": "파일 다운로드",
"downloadFolder": "폴더 다운로드",
"downloadSelected": "선택 항목 다운로드"
},
+ "upload": {
+ "abortUpload": "업로드를 중단하시겠습니까?"
+ },
"errors": {
- "forbidden": "접근 권한이 없습니다.",
- "internal": "오류가 발생하였습니다.",
- "notFound": "해당 경로를 찾을 수 없습니다."
+ "forbidden": "이곳에 접근할 권한이 없습니다.",
+ "internal": "문제가 발생했습니다.",
+ "notFound": "이 위치에 접근할 수 없습니다.",
+ "connection": "서버에 연결할 수 없습니다."
},
"files": {
"body": "본문",
@@ -51,175 +64,192 @@
"files": "파일",
"folders": "폴더",
"home": "홈",
- "lastModified": "최종 수정",
- "loading": "로딩중...",
- "lonely": "폴더가 비어 있습니다...",
+ "lastModified": "마지막 수정일",
+ "loading": "로딩 중...",
+ "lonely": "여기에 아무것도 없네요...",
"metadata": "메타데이터",
- "multipleSelectionEnabled": "다중 선택 켜짐",
+ "multipleSelectionEnabled": "다중 선택 활성화됨",
"name": "이름",
"size": "크기",
- "sortByLastModified": "수정시간순 정렬",
- "sortByName": "이름순",
- "sortBySize": "크기순"
+ "sortByLastModified": "마지막 수정일 순 정렬",
+ "sortByName": "이름 순 정렬",
+ "sortBySize": "크기 순 정렬",
+ "noPreview": "이 파일은 미리보기를 사용할 수 없습니다."
},
"help": {
- "click": "파일이나 디렉토리를 선택해주세요.",
+ "click": "파일 또는 디렉터리 선택",
"ctrl": {
- "click": "여러 개의 파일이나 디렉토리를 선택해주세요.",
- "f": "검색창 열기",
- "s": "파일 또는 디렉토리 다운로드"
+ "click": "여러 파일 또는 디렉터리 선택",
+ "f": "검색 열기",
+ "s": "파일 저장 또는 현재 디렉터리 다운로드"
},
- "del": "선택된 파일 삭제",
- "doubleClick": "파일 또는 디렉토리 열기",
- "esc": "선택 취소/프롬프트 닫기",
- "f1": "정보",
- "f2": "파일 이름 변경",
+ "del": "선택한 항목 삭제",
+ "doubleClick": "파일 또는 디렉터리 열기",
+ "esc": "선택 취소 및/또는 프롬프트 닫기",
+ "f1": "이 정보",
+ "f2": "파일 이름 바꾸기",
"help": "도움말"
},
"login": {
- "createAnAccount": "계정 생성",
+ "createAnAccount": "계정 만들기",
"loginInstead": "이미 계정이 있습니다",
"password": "비밀번호",
"passwordConfirm": "비밀번호 확인",
"passwordsDontMatch": "비밀번호가 일치하지 않습니다",
- "signup": "가입하기",
+ "signup": "가입",
"submit": "로그인",
"username": "사용자 이름",
- "usernameTaken": "사용자 이름이 존재합니다",
- "wrongCredentials": "사용자 이름 또는 비밀번호를 확인하십시오"
+ "usernameTaken": "이미 사용 중인 사용자 이름입니다",
+ "wrongCredentials": "잘못된 자격 증명"
},
"permanent": "영구",
"prompts": {
"copy": "복사",
- "copyMessage": "복사할 디렉토리:",
- "currentlyNavigating": "현재 위치:",
- "deleteMessageMultiple": "{count} 개의 파일을 삭제하시겠습니까?",
- "deleteMessageSingle": "파일 혹은 디렉토리를 삭제하시겠습니까?",
+ "copyMessage": "파일을 복사할 위치를 선택하세요:",
+ "currentlyNavigating": "현재 탐색 중:",
+ "deleteMessageMultiple": "{count}개의 파일을 삭제하시겠습니까?",
+ "deleteMessageSingle": "이 파일/폴더를 삭제하시겠습니까?",
+ "deleteMessageShare": "이 공유({path})를 삭제하시겠습니까?",
+ "deleteUser": "이 사용자를 삭제하시겠습니까?",
"deleteTitle": "파일 삭제",
- "displayName": "게시 이름:",
+ "displayName": "표시 이름:",
"download": "파일 다운로드",
- "downloadMessage": "다운로드 포맷 설정.",
- "error": "에러 발생!",
+ "downloadMessage": "다운로드할 형식을 선택하세요.",
+ "error": "문제가 발생했습니다",
"fileInfo": "파일 정보",
- "filesSelected": "{count} 개의 파일이 선택되었습니다.",
- "lastModified": "최종 수정",
+ "filesSelected": "{count}개의 파일 선택됨.",
+ "lastModified": "마지막 수정일",
"move": "이동",
- "moveMessage": "이동할 화일 또는 디렉토리를 선택하세요:",
- "newArchetype": "원형을 유지하는 포스트를 생성합니다. 파일은 컨텐트 폴더에 생성됩니다.",
- "newDir": "새 디렉토리",
- "newDirMessage": "새 디렉토리 이름을 입력해주세요.",
+ "moveMessage": "파일/폴더의 새 위치를 선택하세요:",
+ "newArchetype": "아키타입을 기반으로 새 게시물을 만듭니다. 파일은 content 폴더에 생성됩니다.",
+ "newDir": "새 디렉터리",
+ "newDirMessage": "새 디렉터리 이름을 지정하세요.",
"newFile": "새 파일",
- "newFileMessage": "새 파일 이름을 입력해주세요.",
- "numberDirs": "디렉토리 수",
+ "newFileMessage": "새 파일 이름을 지정하세요.",
+ "numberDirs": "디렉터리 수",
"numberFiles": "파일 수",
- "rename": "이름 변경",
- "renameMessage": "새로운 이름을 입력하세요.",
- "replace": "대체하기",
- "replaceMessage": "동일한 파일 이름이 존재합니다. 현재 파일을 덮어쓸까요?\n",
- "schedule": "일정",
- "scheduleMessage": "이 글을 공개할 시간을 알려주세요.",
- "show": "보기",
+ "rename": "이름 바꾸기",
+ "renameMessage": "새 이름을 입력하세요:",
+ "replace": "바꾸기",
+ "replaceMessage": "업로드하려는 파일 중 이름이 충돌하는 파일이 있습니다. 이 파일을 건너뛰고 업로드를 계속하거나 기존 파일을 바꾸시겠습니까?\n",
+ "schedule": "예약",
+ "scheduleMessage": "이 게시물의 게시를 예약할 날짜와 시간을 선택하세요.",
+ "show": "표시",
"size": "크기",
"upload": "업로드",
- "uploadMessage": "업로드 옵션을 선택하세요."
+ "uploadFiles": "{files}개의 파일 업로드 중...",
+ "uploadMessage": "업로드할 옵션을 선택하세요.",
+ "optionalPassword": "선택적 비밀번호",
+ "resolution": "해상도",
+ "discardEditorChanges": "변경 사항을 취소하시겠습니까?"
},
"search": {
"images": "이미지",
"music": "음악",
"pdf": "PDF",
- "pressToSearch": "검색하려면 엔터를 입력하세요",
+ "pressToSearch": "Enter 키를 눌러 검색...",
"search": "검색...",
"typeToSearch": "검색어 입력...",
- "types": "Types",
+ "types": "유형",
"video": "비디오"
},
"settings": {
"admin": "관리자",
"administrator": "관리자",
- "allowCommands": "명령 실행",
- "allowEdit": "파일/디렉토리의 수정/변경/삭제 허용",
- "allowNew": "파일/디렉토리 생성 허용",
- "allowPublish": "새 포스트/페이지 생성 허용",
+ "allowCommands": "명령 실행 허용",
+ "allowEdit": "파일 또는 디렉터리 편집, 이름 바꾸기, 삭제 허용",
+ "allowNew": "새 파일 및 디렉터리 생성 허용",
+ "allowPublish": "새 게시물 및 페이지 게시 허용",
"allowSignup": "사용자 가입 허용",
- "avoidChanges": "(수정하지 않으면 비워두세요)",
+ "avoidChanges": "(변경하지 않으려면 비워두세요)",
"branding": "브랜딩",
- "brandingDirectoryPath": "브랜드 디렉토리 경로",
- "brandingHelp": "File Browser 인스턴스는 이름, 로고, 스타일 등을 변경할 수 있습니다. 자세한 사항은 여기{0}에서 확인하세요.",
+ "brandingDirectoryPath": "브랜딩 디렉터리 경로",
+ "brandingHelp": "File Browser 인스턴스의 이름 변경, 로고 교체, 사용자 정의 스타일 추가, GitHub 외부 링크 비활성화를 통해 모양과 느낌을 사용자 지정할 수 있습니다.\n사용자 정의 브랜딩에 대한 자세한 내용은 {0}을(를) 확인하세요.",
"changePassword": "비밀번호 변경",
- "commandRunner": "명령 실행기",
- "commandRunnerHelp": "이벤트에 해당하는 명령을 설정하세요. 줄당 1개의 명령을 적으세요. 환경 변수{0} 와 {1}이 사용가능하며, {0} 은 {1}에 상대 경로 입니다. 자세한 사항은 {2} 를 참조하세요.",
- "commandsUpdated": "명령 수정됨!",
- "createUserDir": "Auto create user home dir while adding new user",
- "customStylesheet": "커스텀 스타일시트",
- "defaultUserDescription": "아래 사항은 신규 사용자들에 대한 기본 설정입니다.",
- "disableExternalLinks": "외부 링크 감추기",
- "disableUsedDiskPercentage": "Disable used disk percentage graph",
+ "commandRunner": "명령어 실행기",
+ "commandRunnerHelp": "여기서 지정된 이벤트에서 실행될 명령어를 설정할 수 있습니다. 한 줄에 하나씩 작성해야 합니다. 환경 변수 {0} 및 {1}을(를) 사용할 수 있으며, {0}은(는) {1}에 상대적입니다. 이 기능과 사용 가능한 환경 변수에 대한 자세한 내용은 {2}을(를) 읽어보세요.",
+ "commandsUpdated": "명령어가 업데이트되었습니다!",
+ "createUserDir": "새 사용자 추가 시 사용자 홈 디렉터리 자동 생성",
+ "tusUploads": "청크 업로드",
+ "tusUploadsHelp": "File Browser는 청크 파일 업로드를 지원하여 불안정한 네트워크에서도 효율적이고 안정적이며 재개 가능하고 분할된 파일 업로드를 가능하게 합니다.",
+ "tusUploadsChunkSize": "요청의 최대 크기를 나타냅니다 (더 작은 업로드에는 직접 업로드가 사용됩니다). 바이트 크기를 나타내는 일반 정수 또는 10MB, 1GB 등과 같은 문자열을 입력할 수 있습니다.",
+ "tusUploadsRetryCount": "청크 업로드 실패 시 재시도 횟수.",
+ "userHomeBasePath": "사용자 홈 디렉터리의 기본 경로",
+ "userScopeGenerationPlaceholder": "범위가 자동으로 생성됩니다",
+ "createUserHomeDirectory": "사용자 홈 디렉터리 생성",
+ "customStylesheet": "사용자 정의 스타일시트",
+ "defaultUserDescription": "새 사용자의 기본 설정입니다.",
+ "disableExternalLinks": "외부 링크 비활성화 (문서 제외)",
+ "disableUsedDiskPercentage": "사용된 디스크 비율 그래프 비활성화",
"documentation": "문서",
- "examples": "예",
- "executeOnShell": "쉘에서 실행",
- "executeOnShellDescription": "기본적으로 File Browser 는 바이너리를 명령어로 호출하여 실행합니다. 쉘을 통해 실행하기를 원한다면, Bash 또는 PowerShell 에 필요한 인수와 플래그를 설정하세요. 사용자 명령어와 이벤트 훅에 모두 적용됩니다.",
- "globalRules": "규칙에 대한 전역설정으로 모든 사용자에게 적용됩니다. 지정된 규칙은 사용자 설정을 덮어쓰기 합니다.",
+ "examples": "예시",
+ "executeOnShell": "셸에서 실행",
+ "executeOnShellDescription": "기본적으로 File Browser는 바이너리를 직접 호출하여 명령을 실행합니다. 대신 셸(예: Bash 또는 PowerShell)에서 실행하려면 필요한 인수 및 플래그와 함께 여기에 정의할 수 있습니다. 설정된 경우 실행하는 명령이 인수로 추가됩니다. 이는 사용자 명령과 이벤트 후크 모두에 적용됩니다.",
+ "globalRules": "이것은 전역 허용 및 차단 규칙 세트입니다. 모든 사용자에게 적용됩니다. 각 사용자 설정에서 특정 규칙을 정의하여 이 규칙을 재정의할 수 있습니다.",
"globalSettings": "전역 설정",
- "hideDotfiles": "숨김파일(dotfile)을 표시하지 않습니다.",
- "insertPath": "경로 입력",
- "insertRegex": "정규식 입력",
+ "hideDotfiles": "숨김 파일 숨기기",
+ "insertPath": "경로 삽입",
+ "insertRegex": "정규식 표현 삽입",
"instanceName": "인스턴스 이름",
"language": "언어",
- "lockPassword": "사용자에 의한 비밀번호 변경을 허용하지 않음",
- "newPassword": "새로운 비밀번호",
- "newPasswordConfirm": "새로운 비밀번호 확인",
- "newUser": "새로운 사용자",
+ "lockPassword": "사용자가 비밀번호를 변경하지 못하도록 잠금",
+ "newPassword": "새 비밀번호",
+ "newPasswordConfirm": "새 비밀번호 확인",
+ "newUser": "새 사용자",
"password": "비밀번호",
- "passwordUpdated": "비밀번호 수정 완료!",
+ "passwordUpdated": "비밀번호가 업데이트되었습니다!",
"path": "경로",
"perm": {
- "create": "파일이나 디렉토리 생성하기",
- "delete": "화일이나 디렉토리 삭제하기",
+ "create": "파일 및 디렉터리 생성",
+ "delete": "파일 및 디렉터리 삭제",
"download": "다운로드",
"execute": "명령 실행",
"modify": "파일 편집",
- "rename": "파일 이름 변경 또는 디렉토리 이동",
- "share": "파일 공유하기"
+ "rename": "파일 및 디렉터리 이름 바꾸기 또는 이동",
+ "share": "파일 공유"
},
"permissions": "권한",
- "permissionsHelp": "사용자를 관리자로 만들거나 권한을 부여할 수 있습니다. 관리자를 선택하면, 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 현재 관리자만 할 수 있습니다.\n",
+ "permissionsHelp": "사용자를 관리자로 설정하거나 개별적으로 권한을 선택할 수 있습니다. \"관리자\"를 선택하면 다른 모든 옵션이 자동으로 선택됩니다. 사용자 관리는 관리자의 권한으로 유지됩니다.\n",
"profileSettings": "프로필 설정",
- "ruleExample1": "점(.)으로 시작하는 모든 파일의 접근을 방지합니다.(예 .git, .gitignore)\n",
- "ruleExample2": "Caddyfile파일의 접근을 방지합니다.",
- "rules": "룰",
- "rulesHelp": "사용자별로 규칙을 허용/방지를 지정할 수 있습니다. 방지된 파일은 보이지 않고 사용자들은 접근할 수 없습니다. 사용자의 접근 허용 범위와 관련해 정규표현식(regex)과 경로를 지원합니다.\n",
+ "ruleExample1": "모든 폴더에서 모든 숨김 파일(예: .git, .gitignore)에 대한 액세스를 방지합니다.\n",
+ "ruleExample2": "범위의 루트에 있는 Caddyfile이라는 파일에 대한 액세스를 차단합니다.",
+ "rules": "규칙",
+ "rulesHelp": "여기서 이 특정 사용자에 대한 허용 및 차단 규칙 세트를 정의할 수 있습니다. 차단된 파일은 목록에 표시되지 않으며 사용자가 액세스할 수 없습니다. 사용자의 범위에 상대적인 정규식 및 경로를 지원합니다.\n",
"scope": "범위",
- "settingsUpdated": "설정 수정됨!",
+ "setDateFormat": "정확한 날짜 형식 설정",
+ "settingsUpdated": "설정이 업데이트되었습니다!",
"shareDuration": "공유 기간",
- "shareManagement": "공유 내역 관리",
- "singleClick": "한번 클릭으로 파일과 폴더를 열도록 합니다.",
+ "shareManagement": "공유 관리",
+ "shareDeleted": "공유가 삭제되었습니다!",
+ "singleClick": "파일 및 디렉터리를 열 때 한 번 클릭 사용",
"themes": {
- "dark": "다크테마",
- "light": "라이트테마",
+ "default": "시스템 기본값",
+ "dark": "어둡게",
+ "light": "밝게",
"title": "테마"
},
"user": "사용자",
"userCommands": "명령어",
- "userCommandsHelp": "사용에게 허용할 명령어를 공백으로 구분하여 입력하세요. 예:\n",
- "userCreated": "사용자 생성됨!",
+ "userCommandsHelp": "이 사용자가 사용할 수 있는 명령어 목록 (공백으로 구분). 예:\n",
+ "userCreated": "사용자가 생성되었습니다!",
"userDefaults": "사용자 기본 설정",
- "userDeleted": "사용자 삭제됨!",
+ "userDeleted": "사용자가 삭제되었습니다!",
"userManagement": "사용자 관리",
- "userUpdated": "사용자 수정됨!",
+ "userUpdated": "사용자가 업데이트되었습니다!",
"username": "사용자 이름",
"users": "사용자"
},
"sidebar": {
"help": "도움말",
- "hugoNew": "Hugo New",
+ "hugoNew": "Hugo 새로 만들기",
"login": "로그인",
"logout": "로그아웃",
"myFiles": "내 파일",
- "newFile": "새로운 파일",
- "newFolder": "새로운 폴더",
+ "newFile": "새 파일",
+ "newFolder": "새 폴더",
"preview": "미리보기",
"settings": "설정",
- "signup": "가입하기",
+ "signup": "가입",
"siteSettings": "사이트 설정"
},
"success": {
@@ -227,9 +257,9 @@
},
"time": {
"days": "일",
- "hours": "시",
+ "hours": "시간",
"minutes": "분",
"seconds": "초",
- "unit": "Time Unit"
+ "unit": "시간 단위"
}
}
From 56b80b6d9b4710538765ba7df5da1f03898f6b81 Mon Sep 17 00:00:00 2001
From: michioxd <80969068+michioxd@users.noreply.github.com>
Date: Mon, 16 Jun 2025 23:47:20 +0700
Subject: [PATCH 023/124] feat: add Vietnamese translation (#3840)
---
.../src/components/settings/Languages.vue | 1 +
frontend/src/i18n/index.ts | 4 +
frontend/src/i18n/vi.json | 265 ++++++++++++++++++
3 files changed, 270 insertions(+)
create mode 100644 frontend/src/i18n/vi.json
diff --git a/frontend/src/components/settings/Languages.vue b/frontend/src/components/settings/Languages.vue
index 2b8a7606..00129a28 100644
--- a/frontend/src/components/settings/Languages.vue
+++ b/frontend/src/components/settings/Languages.vue
@@ -38,6 +38,7 @@ export default {
"sv-se": "Swedish (Sweden)",
tr: "Türkçe",
uk: "Українська",
+ vi: "Tiếng Việt",
"zh-cn": "中文 (简体)",
"zh-tw": "中文 (繁體)",
};
diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts
index f0b0304b..9fcbc2c4 100644
--- a/frontend/src/i18n/index.ts
+++ b/frontend/src/i18n/index.ts
@@ -23,6 +23,7 @@ import("dayjs/locale/sk");
import("dayjs/locale/sv");
import("dayjs/locale/tr");
import("dayjs/locale/uk");
+import("dayjs/locale/vi");
import("dayjs/locale/zh-cn");
import("dayjs/locale/zh-tw");
@@ -103,6 +104,9 @@ export function detectLocale() {
case /^uk\b/.test(locale):
locale = "uk";
break;
+ case /^vi\b/.test(locale):
+ locale = "vi";
+ break;
case /^sv-se\b/.test(locale):
case /^sv\b/.test(locale):
locale = "sv";
diff --git a/frontend/src/i18n/vi.json b/frontend/src/i18n/vi.json
new file mode 100644
index 00000000..5dea8650
--- /dev/null
+++ b/frontend/src/i18n/vi.json
@@ -0,0 +1,265 @@
+{
+ "buttons": {
+ "cancel": "Hủy",
+ "clear": "Xóa",
+ "close": "Đóng",
+ "continue": "Tiếp tục",
+ "copy": "Sao chép",
+ "copyFile": "Sao chép tập tin",
+ "copyToClipboard": "Sao chép vào clipboard",
+ "copyDownloadLinkToClipboard": "Sao chép liên kết tải xuống vào clipboard",
+ "create": "Tạo",
+ "delete": "Xóa",
+ "download": "Tải xuống",
+ "file": "Tập tin",
+ "folder": "Thư mục",
+ "fullScreen": "Toàn màn hình",
+ "hideDotfiles": "Ẩn tập tin ẩn",
+ "info": "Thông tin",
+ "more": "Thêm",
+ "move": "Di chuyển",
+ "moveFile": "Di chuyển tập tin",
+ "new": "Mới",
+ "next": "Tiếp theo",
+ "ok": "OK",
+ "permalink": "Lấy liên kết vĩnh viễn",
+ "previous": "Trước",
+ "preview": "Xem trước",
+ "publish": "Xuất bản",
+ "rename": "Đổi tên",
+ "replace": "Thay thế",
+ "reportIssue": "Báo cáo sự cố",
+ "save": "Lưu",
+ "schedule": "Lên lịch",
+ "search": "Tìm kiếm",
+ "select": "Chọn",
+ "selectMultiple": "Chọn nhiều",
+ "share": "Chia sẻ",
+ "shell": "Chuyển đổi shell",
+ "submit": "Gửi",
+ "switchView": "Chuyển chế độ xem",
+ "toggleSidebar": "Thanh bên",
+ "update": "Cập nhật",
+ "upload": "Tải lên",
+ "openFile": "Mở tệp",
+ "discardChanges": "Hủy bỏ thay đổi"
+ },
+ "download": {
+ "downloadFile": "Tải xuống tệp tin",
+ "downloadFolder": "Tải xuống thư mục",
+ "downloadSelected": "Tải xuống đã chọn"
+ },
+ "upload": {
+ "abortUpload": "Bạn có chắc chắn muốn hủy tải lên không?"
+ },
+ "errors": {
+ "forbidden": "Bạn không có quyền truy cập vào nội dung này.",
+ "internal": "Đã xảy ra lỗi nghiêm trọng.",
+ "notFound": "Không thể truy cập vị trí này.",
+ "connection": "Không thể kết nối đến máy chủ."
+ },
+ "files": {
+ "body": "Nội dung",
+ "closePreview": "Đóng xem trước",
+ "files": "Tập tin",
+ "folders": "Thư mục",
+ "home": "Trang chủ",
+ "lastModified": "Sửa đổi lần cuối",
+ "loading": "Đang tải...",
+ "lonely": "Không có gì ở đây...",
+ "metadata": "Siêu dữ liệu",
+ "multipleSelectionEnabled": "Đã bật chọn nhiều",
+ "name": "Tên",
+ "size": "Kích thước",
+ "sortByLastModified": "Sắp xếp theo ngày sửa đổi",
+ "sortByName": "Sắp xếp theo tên",
+ "sortBySize": "Sắp xếp theo kích thước",
+ "noPreview": "Không có bản xem trước cho tập tin này."
+ },
+ "help": {
+ "click": "chọn tập tin hoặc thư mục",
+ "ctrl": {
+ "click": "chọn nhiều tập tin hoặc thư mục",
+ "f": "mở tìm kiếm",
+ "s": "lưu tập tin hoặc tải thư mục hiện tại"
+ },
+ "del": "xóa các mục đã chọn",
+ "doubleClick": "mở tập tin hoặc thư mục",
+ "esc": "hủy chọn và/hoặc đóng hộp thoại",
+ "f1": "mở trợ giúp này",
+ "f2": "đổi tên tập tin",
+ "help": "Trợ giúp"
+ },
+ "login": {
+ "createAnAccount": "Tạo tài khoản",
+ "loginInstead": "Đã có tài khoản",
+ "password": "Mật khẩu",
+ "passwordConfirm": "Xác nhận mật khẩu",
+ "passwordsDontMatch": "Mật khẩu không khớp",
+ "signup": "Đăng ký",
+ "submit": "Đăng nhập",
+ "username": "Tên người dùng",
+ "usernameTaken": "Tên người dùng đã tồn tại",
+ "wrongCredentials": "Thông tin đăng nhập không đúng"
+ },
+ "permanent": "Vĩnh viễn",
+ "prompts": {
+ "copy": "Sao chép",
+ "copyMessage": "Chọn vị trí để sao chép tệp của bạn:",
+ "currentlyNavigating": "Đang điều hướng tại:",
+ "deleteMessageMultiple": "Bạn có chắc chắn muốn xóa {count} tệp không?",
+ "deleteMessageSingle": "Bạn có chắc chắn muốn xóa tệp/thư mục này không?",
+ "deleteMessageShare": "Bạn có chắc chắn muốn xóa chia sẻ này ({path}) không?",
+ "deleteUser": "Bạn có chắc chắn muốn xóa người dùng này không?",
+ "deleteTitle": "Xóa tệp",
+ "displayName": "Tên hiển thị:",
+ "download": "Tải xuống tệp",
+ "downloadMessage": "Chọn định dạng bạn muốn tải xuống.",
+ "error": "Đã xảy ra lỗi",
+ "fileInfo": "Thông tin tệp",
+ "filesSelected": "{count} tệp đã được chọn.",
+ "lastModified": "Chỉnh sửa lần cuối",
+ "move": "Di chuyển",
+ "moveMessage": "Chọn vị trí mới cho tệp/thư mục của bạn:",
+ "newArchetype": "Tạo một bài viết mới dựa trên nguyên mẫu. Tệp của bạn sẽ được tạo trong thư mục nội dung.",
+ "newDir": "Thư mục mới",
+ "newDirMessage": "Đặt tên cho thư mục mới của bạn.",
+ "newFile": "Tệp mới",
+ "newFileMessage": "Đặt tên cho tệp mới của bạn.",
+ "numberDirs": "Số lượng thư mục",
+ "numberFiles": "Số lượng tệp",
+ "rename": "Đổi tên",
+ "renameMessage": "Nhập tên mới cho",
+ "replace": "Thay thế",
+ "replaceMessage": "Một trong những tệp bạn đang cố tải lên có tên trùng lặp. Bạn có muốn bỏ qua tệp này và tiếp tục tải lên hay thay thế tệp hiện có?\n",
+ "schedule": "Lên lịch",
+ "scheduleMessage": "Chọn ngày và giờ để lên lịch xuất bản bài viết này.",
+ "show": "Hiển thị",
+ "size": "Kích thước",
+ "upload": "Tải lên",
+ "uploadFiles": "Đang tải lên {files} tệp...",
+ "uploadMessage": "Chọn một tùy chọn để tải lên.",
+ "optionalPassword": "Mật khẩu tùy chọn",
+ "resolution": "Độ phân giải",
+ "discardEditorChanges": "Bạn có chắc chắn muốn hủy bỏ các thay đổi đã thực hiện không?"
+ },
+ "search": {
+ "images": "Hình ảnh",
+ "music": "Nhạc",
+ "pdf": "PDF",
+ "pressToSearch": "Nhấn Enter để tìm kiếm...",
+ "search": "Tìm kiếm...",
+ "typeToSearch": "Nhập để tìm kiếm...",
+ "types": "Loại",
+ "video": "Video"
+ },
+ "settings": {
+ "admin": "Quản trị viên",
+ "administrator": "Người quản trị",
+ "allowCommands": "Thực thi lệnh",
+ "allowEdit": "Chỉnh sửa, đổi tên và xóa tệp hoặc thư mục",
+ "allowNew": "Tạo tệp và thư mục mới",
+ "allowPublish": "Xuất bản bài viết và trang mới",
+ "allowSignup": "Cho phép người dùng đăng ký",
+ "avoidChanges": "(để trống để tránh thay đổi)",
+ "branding": "Thương hiệu",
+ "brandingDirectoryPath": "Đường dẫn thư mục thương hiệu",
+ "brandingHelp": "Bạn có thể tùy chỉnh giao diện và trải nghiệm của File Browser bằng cách thay đổi tên, thay thế logo, thêm kiểu tùy chỉnh và thậm chí vô hiệu hóa các liên kết bên ngoài đến GitHub.\nĐể biết thêm thông tin về tùy chỉnh thương hiệu, vui lòng xem {0}.",
+ "changePassword": "Đổi mật khẩu",
+ "commandRunner": "Trình chạy lệnh",
+ "commandRunnerHelp": "Tại đây, bạn có thể thiết lập các lệnh được thực thi trong các sự kiện đã định. Bạn phải viết một lệnh trên mỗi dòng. Các biến môi trường {0} và {1} sẽ có sẵn, trong đó {0} tương đối với {1}. Để biết thêm thông tin về tính năng này và các biến môi trường có sẵn, vui lòng đọc {2}.",
+ "commandsUpdated": "Lệnh đã được cập nhật!",
+ "createUserDir": "Tự động tạo thư mục chính của người dùng khi thêm người dùng mới",
+ "tusUploads": "Tải lên theo phân đoạn",
+ "tusUploadsHelp": "File Browser hỗ trợ tải lên tệp theo phân đoạn, giúp việc tải lên trở nên hiệu quả, đáng tin cậy, có thể tiếp tục và phù hợp với mạng không ổn định.",
+ "tusUploadsChunkSize": "Kích thước tối đa của một yêu cầu (tải lên trực tiếp sẽ được sử dụng cho các tệp nhỏ hơn). Bạn có thể nhập một số nguyên biểu thị kích thước theo byte hoặc một chuỗi như 10MB, 1GB, v.v.",
+ "tusUploadsRetryCount": "Số lần thử lại nếu một phân đoạn tải lên thất bại.",
+ "userHomeBasePath": "Đường dẫn cơ bản của thư mục chính người dùng",
+ "userScopeGenerationPlaceholder": "Phạm vi sẽ được tạo tự động",
+ "createUserHomeDirectory": "Tạo thư mục chính của người dùng",
+ "customStylesheet": "Bảng định dạng tùy chỉnh",
+ "defaultUserDescription": "Đây là cài đặt mặc định cho người dùng mới.",
+ "disableExternalLinks": "Vô hiệu hóa các liên kết bên ngoài (trừ tài liệu)",
+ "disableUsedDiskPercentage": "Vô hiệu hóa biểu đồ phần trăm dung lượng đã sử dụng",
+ "documentation": "tài liệu",
+ "examples": "Ví dụ",
+ "executeOnShell": "Thực thi trên shell",
+ "executeOnShellDescription": "Theo mặc định, File Browser thực thi lệnh bằng cách gọi trực tiếp các tệp nhị phân của chúng. Nếu bạn muốn chạy chúng trên shell (chẳng hạn như Bash hoặc PowerShell), bạn có thể định nghĩa tại đây cùng với các tham số và cờ cần thiết. Nếu được đặt, lệnh bạn thực thi sẽ được thêm làm đối số. Điều này áp dụng cho cả lệnh người dùng và hook sự kiện.",
+ "globalRules": "Đây là tập hợp quy tắc chung về quyền cho phép và từ chối. Chúng áp dụng cho mọi người dùng. Bạn có thể đặt quy tắc riêng cho từng người dùng để ghi đè các quy tắc chung này.",
+ "globalSettings": "Cài đặt chung",
+ "hideDotfiles": "Ẩn tệp ẩn (dotfiles)",
+ "insertPath": "Nhập đường dẫn",
+ "insertRegex": "Nhập biểu thức regex",
+ "instanceName": "Tên phiên bản",
+ "language": "Ngôn ngữ",
+ "lockPassword": "Ngăn người dùng thay đổi mật khẩu",
+ "newPassword": "Mật khẩu mới của bạn",
+ "newPasswordConfirm": "Xác nhận mật khẩu mới",
+ "newUser": "Người dùng mới",
+ "password": "Mật khẩu",
+ "passwordUpdated": "Mật khẩu đã được cập nhật!",
+ "path": "Đường dẫn",
+ "perm": {
+ "create": "Tạo tệp và thư mục",
+ "delete": "Xóa tệp và thư mục",
+ "download": "Tải xuống",
+ "execute": "Thực thi lệnh",
+ "modify": "Chỉnh sửa tệp",
+ "rename": "Đổi tên hoặc di chuyển tệp và thư mục",
+ "share": "Chia sẻ tệp"
+ },
+ "permissions": "Quyền",
+ "permissionsHelp": "Bạn có thể đặt người dùng làm quản trị viên hoặc chọn quyền riêng lẻ. Nếu chọn \"Người quản trị\", tất cả các tùy chọn khác sẽ tự động được chọn. Việc quản lý người dùng vẫn là đặc quyền của quản trị viên.\n",
+ "profileSettings": "Cài đặt hồ sơ",
+ "ruleExample1": "ngăn truy cập vào bất kỳ tệp ẩn nào (chẳng hạn như .git, .gitignore) trong mọi thư mục.\n",
+ "ruleExample2": "chặn truy cập vào tệp có tên Caddyfile trong thư mục gốc của phạm vi.",
+ "rules": "Quy tắc",
+ "rulesHelp": "Tại đây, bạn có thể xác định một tập hợp quy tắc cho phép hoặc từ chối cho người dùng cụ thể này. Các tệp bị chặn sẽ không hiển thị trong danh sách và người dùng không thể truy cập chúng. Chúng tôi hỗ trợ regex và đường dẫn tương đối với phạm vi của người dùng.\n",
+ "scope": "Phạm vi",
+ "setDateFormat": "Đặt định dạng ngày chính xác",
+ "settingsUpdated": "Cài đặt đã được cập nhật!",
+ "shareDuration": "Thời gian chia sẻ",
+ "shareManagement": "Quản lý chia sẻ",
+ "shareDeleted": "Chia sẻ đã bị xóa!",
+ "singleClick": "Dùng một lần nhấp để mở tệp và thư mục",
+ "themes": {
+ "default": "Mặc định hệ thống",
+ "dark": "Tối",
+ "light": "Sáng",
+ "title": "Chủ đề"
+ },
+ "user": "Người dùng",
+ "userCommands": "Lệnh",
+ "userCommandsHelp": "Danh sách lệnh được phân tách bằng khoảng trắng dành cho người dùng này. Ví dụ:\n",
+ "userCreated": "Người dùng đã được tạo!",
+ "userDefaults": "Cài đặt mặc định của người dùng",
+ "userDeleted": "Người dùng đã bị xóa!",
+ "userManagement": "Quản lý người dùng",
+ "userUpdated": "Người dùng đã được cập nhật!",
+ "username": "Tên người dùng",
+ "users": "Người dùng"
+ },
+ "sidebar": {
+ "help": "Trợ giúp",
+ "hugoNew": "Hugo New",
+ "login": "Đăng nhập",
+ "logout": "Đăng xuất",
+ "myFiles": "Tập tin của tôi",
+ "newFile": "Tập tin mới",
+ "newFolder": "Thư mục mới",
+ "preview": "Xem trước",
+ "settings": "Cài đặt",
+ "signup": "Đăng ký",
+ "siteSettings": "Cài đặt trang"
+ },
+ "success": {
+ "linkCopied": "Liên kết đã được sao chép!"
+ },
+ "time": {
+ "days": "Ngày",
+ "hours": "Giờ",
+ "minutes": "Phút",
+ "seconds": "Giây",
+ "unit": "Đơn vị"
+ }
+}
\ No newline at end of file
From 56a0f9244bfb9ff0f51307a9fcf652eff4b096a6 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Mon, 16 Jun 2025 20:18:42 +0200
Subject: [PATCH 024/124] chore(release): 2.32.1
---
CHANGELOG.md | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d414dcb..7ef7bda8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,31 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+### [2.32.1](https://github.com/filebrowser/filebrowser/compare/v2.32.0...v2.32.1) (2025-06-16)
+
+
+### Features
+
+* add Vietnamese translation ([#3840](https://github.com/filebrowser/filebrowser/issues/3840)) ([56b80b6](https://github.com/filebrowser/filebrowser/commit/56b80b6d9b4710538765ba7df5da1f03898f6b81))
+* improve pt-br translations with new keys and refinements ([#4903](https://github.com/filebrowser/filebrowser/issues/4903)) ([a882fb6](https://github.com/filebrowser/filebrowser/commit/a882fb6c85ab6ccc845ed0bf3908d8e5e60ce346))
+* update translation ko.json ([#3852](https://github.com/filebrowser/filebrowser/issues/3852)) ([d9ebd65](https://github.com/filebrowser/filebrowser/commit/d9ebd65ffcf9b2166fec708d51849796d12b16e0))
+
+
+### Bug Fixes
+
+* err shadowing lint ([c606a01](https://github.com/filebrowser/filebrowser/commit/c606a01a2d20932fb32ee896234d57631f8c47e4))
+* generate random admin password on quick setup ([a46acba](https://github.com/filebrowser/filebrowser/commit/a46acba5f92ee044661880d6ae349e289d984328)), closes [#3646](https://github.com/filebrowser/filebrowser/issues/3646)
+* imports lint ([54b91b8](https://github.com/filebrowser/filebrowser/commit/54b91b8ff0b8ee1f02f72425ab97d27a5d942fc3))
+* set videojs locale ([#3742](https://github.com/filebrowser/filebrowser/issues/3742)) ([71a8f56](https://github.com/filebrowser/filebrowser/commit/71a8f5662c207e3cd4ee714a5b5a961121f510cd))
+
+
+### Build
+
+* **deps-dev:** bump vite from 6.0.11 to 6.1.6 in /frontend ([#3886](https://github.com/filebrowser/filebrowser/issues/3886)) ([5355629](https://github.com/filebrowser/filebrowser/commit/5355629fd1e7bd85ee3222fca22da899ba23ea95))
+* **deps:** bump golang.org/x/crypto from 0.31.0 to 0.35.0 ([#3865](https://github.com/filebrowser/filebrowser/issues/3865)) ([0ba9505](https://github.com/filebrowser/filebrowser/commit/0ba9505a19cb369653fc9f8260dc02fcc6587629))
+* **deps:** bump golang.org/x/net from 0.33.0 to 0.38.0 ([#3869](https://github.com/filebrowser/filebrowser/issues/3869)) ([cfea84f](https://github.com/filebrowser/filebrowser/commit/cfea84fd5e7ec9c1d2366293e5db12baaa4e3a81))
+* **deps:** bump vue-i18n from 11.0.1 to 11.1.2 in /frontend ([#3786](https://github.com/filebrowser/filebrowser/issues/3786)) ([35d1c09](https://github.com/filebrowser/filebrowser/commit/35d1c092434b80b22c89a614a02122e9f5965b39))
+
## [2.32.0](https://github.com/filebrowser/filebrowser/compare/v2.31.2...v2.32.0) (2025-01-31)
From c34c0afecf3242b16ad5d5584cd90a6ad323361c Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Tue, 17 Jun 2025 09:05:21 +0200
Subject: [PATCH 025/124] feat: updated for project File Browser (#5159)
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
---
frontend/src/i18n/ru.json | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/frontend/src/i18n/ru.json b/frontend/src/i18n/ru.json
index bb6e8c92..440e285b 100644
--- a/frontend/src/i18n/ru.json
+++ b/frontend/src/i18n/ru.json
@@ -3,14 +3,17 @@
"cancel": "Отмена",
"clear": "Очистить",
"close": "Закрыть",
+ "continue": "Продолжить",
"copy": "Копировать",
"copyFile": "Скопировать файл",
"copyToClipboard": "Скопировать в буфер",
+ "copyDownloadLinkToClipboard": "Скопировать ссылку в буфер",
"create": "Создать",
"delete": "Удалить",
"download": "Скачать",
"file": "Файл",
"folder": "Папка",
+ "fullScreen": " Развернуть на весь экран",
"hideDotfiles": "Скрыть точечные файлы",
"info": "Инфо",
"more": "Еще",
@@ -21,6 +24,7 @@
"ok": "OK",
"permalink": "Получить постоянную ссылку",
"previous": "Назад",
+ "preview": "Предпросмотр",
"publish": "Опубликовать",
"rename": "Переименовать",
"replace": "Перезаписать",
@@ -37,13 +41,17 @@
"toggleSidebar": "Боковая панель",
"update": "Обновить",
"upload": "Загрузить",
- "openFile": "Открыть файл"
+ "openFile": "Открыть файл",
+ "discardChanges": "Отказаться"
},
"download": {
"downloadFile": "Скачать файл",
"downloadFolder": "Загрузить папку",
"downloadSelected": "Скачать выбранное"
},
+ "upload": {
+ "abortUpload": "Вы действительно, что хотите прервать операцию?"
+ },
"errors": {
"forbidden": "У вас нет прав доступа к этому.",
"internal": "Что-то пошло не так.",
@@ -72,7 +80,7 @@
"click": "выбрать файл или каталог",
"ctrl": {
"click": "выбрать несколько файлов или каталогов",
- "f": "открыть поиск",
+ "f": "открытые поиски",
"s": "скачать файл или текущий каталог"
},
"del": "удалить выбранные элементы",
@@ -102,6 +110,7 @@
"deleteMessageMultiple": "Удалить эти файлы ({count})?",
"deleteMessageSingle": "Удалить этот файл/каталог?",
"deleteMessageShare": "Удалить этот общий файл/каталог ({path})?",
+ "deleteUser": "Вы действительно, хотите удалить пользователя?",
"deleteTitle": "Удалить файлы",
"displayName": "Отображаемое имя:",
"download": "Скачать файлы",
@@ -111,7 +120,7 @@
"filesSelected": "Файлов выбрано: {count}.",
"lastModified": "Последнее изменение",
"move": "Переместить",
- "moveMessage": "Переместить в:",
+ "moveMessage": "Выберите новый домашний каталог для ваших файлов/папок:",
"newArchetype": "Создайте новую запись на основе архетипа. Файл будет создан в каталоге.",
"newDir": "Новый каталог",
"newDirMessage": "Имя нового каталога.",
@@ -128,8 +137,11 @@
"show": "Показать",
"size": "Размер",
"upload": "Загрузить",
+ "uploadFiles": "Загружаю {files} файлы...",
"uploadMessage": "Выберите вариант для загрузки.",
- "optionalPassword": "Необязательный пароль"
+ "optionalPassword": "Необязательный пароль",
+ "resolution": "Разрешение",
+ "discardEditorChanges": "Вы действительно желаете отменить ваши правки?"
},
"search": {
"images": "Изображения",
@@ -158,6 +170,13 @@
"commandRunnerHelp": "Здесь вы можете установить команды, которые будут выполняться в указанных событиях. Вы должны указать по одной команде в каждой строке. Переменные среды {0} и {1} будут доступны, будучи {0} относительно {1}. Дополнительные сведения об этой функции и доступных переменных среды см. В {2}.",
"commandsUpdated": "Команды обновлены!",
"createUserDir": "Автоматическое создание домашнего каталога пользователя при добавлении нового пользователя",
+ "tusUploads": "Загруженные файлы",
+ "tusUploadsHelp": " File Browser поддерживает загрузку файлов по частям, что позволяет работать в сетях низкого качества.",
+ "tusUploadsChunkSize": "Указывает максимальный размер запроса (мелкие загрузки пойдут напрямую). Вы можете ввести простое целое число, обозначающее размер ввода в байтах, или строку, например 10MB, 1GB и т. д.",
+ "tusUploadsRetryCount": "Количество повторных попыток, которые необходимо выполнить, если фрагмент не удалось загрузить.",
+ "userHomeBasePath": "Путь к домашнему каталогу пользователя",
+ "userScopeGenerationPlaceholder": "Область действия будет сгенерирована автоматически",
+ "createUserHomeDirectory": "Создать домашний каталог пользователя",
"customStylesheet": "Свой стиль",
"defaultUserDescription": "Это настройки по умолчанию для новых пользователей.",
"disableExternalLinks": "Отключить внешние ссылки (кроме документации)",
@@ -196,7 +215,7 @@
"ruleExample2": "блокирует доступ к файлу с именем Caddyfile в корневой области.",
"rules": "Права",
"rulesHelp": "Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны для пользователя. Есть поддержка регулярных выражений и относительных путей.\n",
- "scope": "Корень",
+ "scope": "Область",
"setDateFormat": "Установить точный формат даты",
"settingsUpdated": "Настройки применены!",
"shareDuration": "Время расшаренной ссылки",
@@ -204,6 +223,7 @@
"shareDeleted": "Расшаренная ссылка удалена!",
"singleClick": "Открытие файлов и каталогов одним кликом",
"themes": {
+ "default": " Системные настройки по умолчанию",
"dark": "Темная",
"light": "Светлая",
"title": "Тема"
From 0cca7d8dc016bae3fc671cf46772c9fbe4f92d96 Mon Sep 17 00:00:00 2001
From: Henrique Dias
Date: Tue, 17 Jun 2025 11:37:15 +0200
Subject: [PATCH 026/124] docs: move most docs to main repository (#5141)
---
.github/PULL_REQUEST_TEMPLATE.md | 1 +
README.md | 28 ++---
docs/assets/1.jpg | Bin 0 -> 66296 bytes
docs/assets/2.jpg | Bin 0 -> 119309 bytes
docs/assets/3.jpg | Bin 0 -> 154304 bytes
docs/assets/4.jpg | Bin 0 -> 217335 bytes
docs/assets/5.jpg | Bin 0 -> 133646 bytes
docs/assets/6.jpg | Bin 0 -> 61661 bytes
docs/code-of-conduct.md | 46 ++++++++
docs/configuration.md | 148 +++++++++++++++++++++++++
docs/contributing.md | 91 +++++++++++++++
docs/installation.md | 85 ++++++++++++++
SECURITY.md => docs/security.md | 0
frontend/src/views/settings/Global.vue | 4 +-
transifex.yml | 2 +-
15 files changed, 388 insertions(+), 17 deletions(-)
create mode 100644 docs/assets/1.jpg
create mode 100644 docs/assets/2.jpg
create mode 100644 docs/assets/3.jpg
create mode 100644 docs/assets/4.jpg
create mode 100644 docs/assets/5.jpg
create mode 100644 docs/assets/6.jpg
create mode 100644 docs/code-of-conduct.md
create mode 100644 docs/configuration.md
create mode 100644 docs/contributing.md
create mode 100644 docs/installation.md
rename SECURITY.md => docs/security.md (100%)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 873df269..a8efcb42 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -11,5 +11,6 @@
Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/).
- [ ] I am aware the project is currently in maintenance-only mode. See [README](https://github.com/filebrowser/community/blob/master/README.md)
+- [ ] I am aware that translations MUST be made through [Transifex](https://app.transifex.com/file-browser/file-browser/) and that this PR is NOT a translation update
- [ ] I am making a PR against the `master` branch.
- [ ] I am sure File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md).
diff --git a/README.md b/README.md
index d49de48e..dc1eb3e9 100644
--- a/README.md
+++ b/README.md
@@ -25,28 +25,28 @@ filebrowser provides a file managing interface within a specified directory and
[issues]: https://github.com/filebrowser/filebrowser/issues
[discussions]: https://github.com/filebrowser/filebrowser/discussions
-## Demo
-
-URL: https://demo.filebrowser.org/
-
-Credentials: `demo`/`demo`
-
## Features
-Please refer to our docs at [https://filebrowser.org/features](https://filebrowser.org/features)
+File Browser is a **create-your-own-cloud-kind** of software where you can install it on a server, direct it to a path and then access your files through a nice web interface. You have many available features!
+
+| Easy Login System | Sleek Interface | User Management |
+| :----------------------: | :----------------------: | :----------------------: |
+|  |  |  |
+
+
+| File Editing | Custom Commands | Customization |
+| :----------------------: | :----------------------: | :----------------------: |
+|  |  |  |
+
## Install
-For installation instructions please refer to our docs at [https://filebrowser.org/installation](https://filebrowser.org/installation).
+For information on how to install File Browser, please check [docs/installation.md](./docs/installation.md).
## Configuration
-[Authentication Method](https://filebrowser.org/configuration/authentication-method) - You can change the way the user authenticates with the filebrowser server
-
-[Command Runner](https://filebrowser.org/configuration/command-runner) - The command runner is a feature that enables you to execute any shell command you want before or after a certain event.
-
-[Custom Branding](https://filebrowser.org/configuration/custom-branding) - You can customize your File Browser installation by change its name to any other you want, by adding a global custom style sheet and by using your own logotype if you want.
+For information on how to configure File Browser, please check [docs/configuration.md](./docs/configuration.md).
## Contributing
-If you're interested in contributing to this project, our docs are best places to start [https://filebrowser.org/contributing](https://filebrowser.org/contributing).
+For information on how to contribute to the project, including how translations are managed, please check [docs/contributing.md](./docs/contributing.md).
diff --git a/docs/assets/1.jpg b/docs/assets/1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..413e50adf7ed02f4d61104354e51841c84e64e2e
GIT binary patch
literal 66296
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