diff options
149 files changed, 3251 insertions, 1089 deletions
diff --git a/apps/contactsinteraction/l10n/fr.js b/apps/contactsinteraction/l10n/fr.js index 2318a1d66a8..f93ab8d71a5 100644 --- a/apps/contactsinteraction/l10n/fr.js +++ b/apps/contactsinteraction/l10n/fr.js @@ -4,6 +4,6 @@ OC.L10N.register( "Recently contacted" : "Contacté récemment", "Contacts Interaction" : "Interaction avec les contacts", "Manages interaction between accounts and contacts" : "Gère l'interaction entre les comptes et les contacts", - "Collect data about accounts and contacts interactions and provide an address book for the data" : "Collectez des données sur les interactions entre les comptes et les contacts et fournissez un répertoire pour ces données" + "Collect data about accounts and contacts interactions and provide an address book for the data" : "Collecte des données sur les interactions entre les comptes et les contacts et fournit un répertoire pour ces données" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/contactsinteraction/l10n/fr.json b/apps/contactsinteraction/l10n/fr.json index bd51f4d59a5..0f825180e8d 100644 --- a/apps/contactsinteraction/l10n/fr.json +++ b/apps/contactsinteraction/l10n/fr.json @@ -2,6 +2,6 @@ "Recently contacted" : "Contacté récemment", "Contacts Interaction" : "Interaction avec les contacts", "Manages interaction between accounts and contacts" : "Gère l'interaction entre les comptes et les contacts", - "Collect data about accounts and contacts interactions and provide an address book for the data" : "Collectez des données sur les interactions entre les comptes et les contacts et fournissez un répertoire pour ces données" + "Collect data about accounts and contacts interactions and provide an address book for the data" : "Collecte des données sur les interactions entre les comptes et les contacts et fournit un répertoire pour ces données" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js index d6569cdc4f9..66e17898188 100644 --- a/apps/dav/l10n/de.js +++ b/apps/dav/l10n/de.js @@ -282,7 +282,7 @@ OC.L10N.register( "Saved availability" : "Verfügbarkeit gespeichert", "Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden", "Time zone:" : "Zeitzone:", - "to" : "an", + "to" : "bis", "Delete slot" : "Slot löschen", "No working hours set" : "Keine Arbeitszeiten konfiguriert", "Add slot" : "Slot hinzufügen", diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json index e3a6f980ba1..94354959e6f 100644 --- a/apps/dav/l10n/de.json +++ b/apps/dav/l10n/de.json @@ -280,7 +280,7 @@ "Saved availability" : "Verfügbarkeit gespeichert", "Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden", "Time zone:" : "Zeitzone:", - "to" : "an", + "to" : "bis", "Delete slot" : "Slot löschen", "No working hours set" : "Keine Arbeitszeiten konfiguriert", "Add slot" : "Slot hinzufügen", diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js index 1072d8f9ff2..0a53ba564a7 100644 --- a/apps/dav/l10n/de_DE.js +++ b/apps/dav/l10n/de_DE.js @@ -282,7 +282,7 @@ OC.L10N.register( "Saved availability" : "Verfügbarkeit gespeichert", "Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden", "Time zone:" : "Zeitzone:", - "to" : "an", + "to" : "bis", "Delete slot" : "Zeitfenster löschen", "No working hours set" : "Keine Arbeitszeiten konfiguriert", "Add slot" : "Zeitfenster hinzufügen", diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json index 721cee8c91a..7bf998eec36 100644 --- a/apps/dav/l10n/de_DE.json +++ b/apps/dav/l10n/de_DE.json @@ -280,7 +280,7 @@ "Saved availability" : "Verfügbarkeit gespeichert", "Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden", "Time zone:" : "Zeitzone:", - "to" : "an", + "to" : "bis", "Delete slot" : "Zeitfenster löschen", "No working hours set" : "Keine Arbeitszeiten konfiguriert", "Add slot" : "Zeitfenster hinzufügen", diff --git a/apps/dav/l10n/et_EE.js b/apps/dav/l10n/et_EE.js index 69f941b3daa..2cf7703d686 100644 --- a/apps/dav/l10n/et_EE.js +++ b/apps/dav/l10n/et_EE.js @@ -31,7 +31,11 @@ OC.L10N.register( "{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}", "You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}", "{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}", - "You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}", + "You updated event {event} in calendar {calendar}" : "Sa uuendasid „{event}“ sündmust „{calendar}“ kalendris", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} teisaldas „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Sina teisaldasid „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse", + "{actor} restored event {event} of calendar {calendar}" : "{actor} taastas „{event}“ sündmuse „{calendar}“ kalendris", + "You restored event {event} of calendar {calendar}" : "Sina taastasid „{event}“ sündmuse „{calendar}“ kalendris", "Busy" : "Hõivatud", "{actor} created to-do {todo} in list {calendar}" : "{actor} lisas {todo} ülesande {calendar} loendissse", "You created to-do {todo} in list {calendar}" : "Sina lisasid {todo} ülesande {calendar} loendisse", @@ -68,6 +72,7 @@ OC.L10N.register( "Description: %s" : "Kirjeldus: %s", "Where: %s" : "Kus: %s", "%1$s via %2$s" : "%1$s %2$s kaudu", + "Every Day between %1$s - %2$s until %3$s" : "Iga päev ajavahemikus %1$s-%2$s kuni %3$s", "Cancelled: %1$s" : "Tühistatud: %1$s", "\"%1$s\" has been canceled" : "„%1$s“ on tühistatud", "Re: %1$s" : "Re: %1$s", diff --git a/apps/dav/l10n/et_EE.json b/apps/dav/l10n/et_EE.json index 2eed43d0c8f..e4615d45ca2 100644 --- a/apps/dav/l10n/et_EE.json +++ b/apps/dav/l10n/et_EE.json @@ -29,7 +29,11 @@ "{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}", "You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}", "{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}", - "You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}", + "You updated event {event} in calendar {calendar}" : "Sa uuendasid „{event}“ sündmust „{calendar}“ kalendris", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} teisaldas „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Sina teisaldasid „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse", + "{actor} restored event {event} of calendar {calendar}" : "{actor} taastas „{event}“ sündmuse „{calendar}“ kalendris", + "You restored event {event} of calendar {calendar}" : "Sina taastasid „{event}“ sündmuse „{calendar}“ kalendris", "Busy" : "Hõivatud", "{actor} created to-do {todo} in list {calendar}" : "{actor} lisas {todo} ülesande {calendar} loendissse", "You created to-do {todo} in list {calendar}" : "Sina lisasid {todo} ülesande {calendar} loendisse", @@ -66,6 +70,7 @@ "Description: %s" : "Kirjeldus: %s", "Where: %s" : "Kus: %s", "%1$s via %2$s" : "%1$s %2$s kaudu", + "Every Day between %1$s - %2$s until %3$s" : "Iga päev ajavahemikus %1$s-%2$s kuni %3$s", "Cancelled: %1$s" : "Tühistatud: %1$s", "\"%1$s\" has been canceled" : "„%1$s“ on tühistatud", "Re: %1$s" : "Re: %1$s", diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php index 045b9d7e784..98e0f2e9e4b 100644 --- a/apps/dav/lib/Connector/Sabre/File.php +++ b/apps/dav/lib/Connector/Sabre/File.php @@ -19,6 +19,7 @@ use OCA\DAV\Connector\Sabre\Exception\Forbidden as DAVForbiddenException; use OCA\DAV\Connector\Sabre\Exception\UnsupportedMediaType; use OCP\App\IAppManager; use OCP\Encryption\Exceptions\GenericEncryptionException; +use OCP\Files; use OCP\Files\EntityTooLargeException; use OCP\Files\FileInfo; use OCP\Files\ForbiddenException; @@ -229,7 +230,7 @@ class File extends Node implements IFile { // because we have no clue about the cause we can only throw back a 500/Internal Server Error throw new Exception($this->l10n->t('Could not write file contents')); } - [$count, $result] = \OC_Helper::streamCopy($data, $target); + [$count, $result] = Files::streamCopy($data, $target, true); fclose($target); } diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js index 40ad6b5be23..d1e9d2c2e71 100644 --- a/apps/federatedfilesharing/l10n/de_DE.js +++ b/apps/federatedfilesharing/l10n/de_DE.js @@ -53,7 +53,7 @@ OC.L10N.register( "Federated Cloud" : "Federated Cloud", "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Sie können mit jedem teilen, der einen Nextcloud-Server oder andere Open Cloud Mesh (OCM) kompatible Server und Dienste verwendet! Geben Sie einfach deren Federated-Cloud-ID in den Teilen-Dialog ein. Diese sieht wie folgt aus: person@cloud.example.com", "Your Federated Cloud ID" : "Ihre Federated-Cloud-ID", - "Share it so your friends can share files with you:" : "Teilen Sie es, so dass Ihre Freunde Dateien mit Ihnen teilen können:", + "Share it so your friends can share files with you:" : "Teilen Sie es, damit Ihre Freunde Dateien mit Ihnen teilen können:", "Facebook" : "Facebook", "X (formerly Twitter)" : "X (früher Twitter)", "formerly Twitter" : "früher Twitter", diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json index c6cdd274032..962f6fb0857 100644 --- a/apps/federatedfilesharing/l10n/de_DE.json +++ b/apps/federatedfilesharing/l10n/de_DE.json @@ -51,7 +51,7 @@ "Federated Cloud" : "Federated Cloud", "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Sie können mit jedem teilen, der einen Nextcloud-Server oder andere Open Cloud Mesh (OCM) kompatible Server und Dienste verwendet! Geben Sie einfach deren Federated-Cloud-ID in den Teilen-Dialog ein. Diese sieht wie folgt aus: person@cloud.example.com", "Your Federated Cloud ID" : "Ihre Federated-Cloud-ID", - "Share it so your friends can share files with you:" : "Teilen Sie es, so dass Ihre Freunde Dateien mit Ihnen teilen können:", + "Share it so your friends can share files with you:" : "Teilen Sie es, damit Ihre Freunde Dateien mit Ihnen teilen können:", "Facebook" : "Facebook", "X (formerly Twitter)" : "X (früher Twitter)", "formerly Twitter" : "früher Twitter", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index f4b11b60bfe..3237a8b49d0 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -99,6 +99,10 @@ OC.L10N.register( "Rename file" : "Datei umbenennen", "Folder" : "Ordner", "Unknown file type" : "Unbekannter Dateityp", + "{ext} image" : "{ext}-Bild", + "{ext} video" : "{ext}-Video", + "{ext} audio" : "{ext}-Audio", + "{ext} text" : "{ext}-Text", "Pending" : "Ausstehend", "Unknown date" : "Unbekanntes Datum", "Clear filter" : "Filter zurücksetzen", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index f34d8585898..f5ebd06c5a8 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -97,6 +97,10 @@ "Rename file" : "Datei umbenennen", "Folder" : "Ordner", "Unknown file type" : "Unbekannter Dateityp", + "{ext} image" : "{ext}-Bild", + "{ext} video" : "{ext}-Video", + "{ext} audio" : "{ext}-Audio", + "{ext} text" : "{ext}-Text", "Pending" : "Ausstehend", "Unknown date" : "Unbekanntes Datum", "Clear filter" : "Filter zurücksetzen", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index cbb4d16f40a..bcf374148b5 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -99,6 +99,10 @@ OC.L10N.register( "Rename file" : "Datei umbenennen", "Folder" : "Ordner", "Unknown file type" : "Unbekannter Dateityp", + "{ext} image" : "{ext}-Bild", + "{ext} video" : "{ext}-Video", + "{ext} audio" : "{ext}-Audio", + "{ext} text" : "{ext}-Text", "Pending" : "Ausstehend", "Unknown date" : "Unbekanntes Datum", "Clear filter" : "Filter zurücksetzen", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 8e1f611f317..fd0d1714920 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -97,6 +97,10 @@ "Rename file" : "Datei umbenennen", "Folder" : "Ordner", "Unknown file type" : "Unbekannter Dateityp", + "{ext} image" : "{ext}-Bild", + "{ext} video" : "{ext}-Video", + "{ext} audio" : "{ext}-Audio", + "{ext} text" : "{ext}-Text", "Pending" : "Ausstehend", "Unknown date" : "Unbekanntes Datum", "Clear filter" : "Filter zurücksetzen", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index fd8ec312af7..4949fbd61b3 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -98,6 +98,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "Renamed \"{oldName}\" to \"{newName}\"", "Rename file" : "Rename file", "Folder" : "Folder", + "Unknown file type" : "Unknown file type", + "{ext} image" : "{ext} image", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} audio", + "{ext} text" : "{ext} text", "Pending" : "Pending", "Unknown date" : "Unknown date", "Clear filter" : "Clear filter", @@ -108,6 +113,7 @@ OC.L10N.register( "Total rows summary" : "Total rows summary", "Toggle selection for all files and folders" : "Toggle selection for all files and folders", "Name" : "Name", + "File type" : "File type", "Size" : "Size", "\"{displayName}\" failed on some elements" : "\"{displayName}\" failed on some elements", "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batch action executed successfully", @@ -186,6 +192,7 @@ OC.L10N.register( "Sort favorites first" : "Sort favourites first", "Sort folders before files" : "Sort folders before files", "Show hidden files" : "Show hidden files", + "Show file type column" : "Show file type column", "Crop image previews" : "Crop image previews", "Enable the grid view" : "Enable the grid view", "Enable folder tree" : "Enable folder tree", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 912befe3b81..eb30639fa72 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -96,6 +96,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "Renamed \"{oldName}\" to \"{newName}\"", "Rename file" : "Rename file", "Folder" : "Folder", + "Unknown file type" : "Unknown file type", + "{ext} image" : "{ext} image", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} audio", + "{ext} text" : "{ext} text", "Pending" : "Pending", "Unknown date" : "Unknown date", "Clear filter" : "Clear filter", @@ -106,6 +111,7 @@ "Total rows summary" : "Total rows summary", "Toggle selection for all files and folders" : "Toggle selection for all files and folders", "Name" : "Name", + "File type" : "File type", "Size" : "Size", "\"{displayName}\" failed on some elements" : "\"{displayName}\" failed on some elements", "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batch action executed successfully", @@ -184,6 +190,7 @@ "Sort favorites first" : "Sort favourites first", "Sort folders before files" : "Sort folders before files", "Show hidden files" : "Show hidden files", + "Show file type column" : "Show file type column", "Crop image previews" : "Crop image previews", "Enable the grid view" : "Enable the grid view", "Enable folder tree" : "Enable folder tree", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index 17330fbf036..86f79a96ea9 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -99,6 +99,10 @@ OC.L10N.register( "Rename file" : "Muuda failinime", "Folder" : "Kaust", "Unknown file type" : "Tundmatu failitüüp", + "{ext} image" : "{ext} pilt", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} helifail", + "{ext} text" : "{ext} tekst", "Pending" : "Ootel", "Unknown date" : "Tundmatu kuupäev", "Clear filter" : "Tühjenda filter", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index cb2182202e8..7c1baa0915c 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -97,6 +97,10 @@ "Rename file" : "Muuda failinime", "Folder" : "Kaust", "Unknown file type" : "Tundmatu failitüüp", + "{ext} image" : "{ext} pilt", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} helifail", + "{ext} text" : "{ext} tekst", "Pending" : "Ootel", "Unknown date" : "Tundmatu kuupäev", "Clear filter" : "Tühjenda filter", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 6e5809bbed8..4fbb46411f3 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -71,6 +71,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Transféré de %1$s à %2$s", "Files compatibility" : "Compatibilité des fichiers", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Permet de restreindre les noms de fichiers pour s'assurer que les fichiers peuvent être synchronisés avec tous les clients. Par défaut, tous les noms de fichier valides sur POSIX (c'est à dire sur Linux ou MacOS) sont acceptés.", + "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Après avoir activé les noms de fichiers compatibles Windows, les fichiers existants ne peuvent plus être modifiés mais peuvent être renommés avec de nouveaux noms valides par leur propriétaire.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Il est également possible de migrer les fichiers automatiquement après avoir activé ce paramètre, veuillez vous référer à la documentation sur la commande occ.", "Enforce Windows compatibility" : "Forcer la compatibilité Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Cela va bloquer les noms de fichier non valides sur les systèmes Windows, comme utiliser des noms réservés ou des caractères spéciaux. Mais cela ne renforcera pas la compatibilité de la sensibilité à la casse.", "File Management" : "Gestion de fichiers", @@ -96,6 +98,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" renommé en \"{newName}\"", "Rename file" : "Renommer le fichier", "Folder" : "Dossier", + "Unknown file type" : "Type de fichier inconnu", + "{ext} image" : "{ext} image", + "{ext} video" : "{ext} vidéo", + "{ext} audio" : "{ext} audio", + "{ext} text" : "{ext} texte", "Pending" : "En attente", "Unknown date" : "Date inconnue", "Clear filter" : "Supprimer le filtre", @@ -106,6 +113,7 @@ OC.L10N.register( "Total rows summary" : "Récapitulatif du nombre total de lignes", "Toggle selection for all files and folders" : "Basculer la sélection pour tous les fichiers et dossiers", "Name" : "Nom", + "File type" : "Type de fichier", "Size" : "Taille", "\"{displayName}\" failed on some elements" : "\"{displayName}\" a échoué pour certains éléments", "\"{displayName}\" batch action executed successfully" : "L’action « {displayName} » par lot a été exécutée avec succès", @@ -184,6 +192,7 @@ OC.L10N.register( "Sort favorites first" : "Trier les favoris en premier", "Sort folders before files" : "Trier les dossiers avant les fichiers", "Show hidden files" : "Montrer les fichiers masqués", + "Show file type column" : "Afficher la colonne du type de fichier", "Crop image previews" : "Afficher en miniatures carrées", "Enable the grid view" : "Activer la vue en grille", "Enable folder tree" : "Activer l'arborescence des dossiers", @@ -194,6 +203,7 @@ OC.L10N.register( "Use this address to access your Files via WebDAV" : "Utilisez cette adresse pour accéder à vos fichiers via WebDAV", "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Si vous avez activé le 2FA, vous devez créer et utiliser un nouveau mot de passe d'application en cliquant ici.", "Warnings" : "Avertissements", + "Prevent warning dialogs from open or reenable them." : "Empêchez l'ouverture des boîtes de dialogue d'avertissement ou réactivez-les.", "Show a warning dialog when changing a file extension." : "Afficher un avertissement quand l'extension du fichier est modifiée.", "Keyboard shortcuts" : "Raccourcis clavier", "Speed up your Files experience with these quick shortcuts." : "Accélérez votre expérience Fichiers avec ces raccourcis rapides.", @@ -235,6 +245,8 @@ OC.L10N.register( "Failed to convert files: {message}" : "Impossible de convertir les fichiers : {message}", "All files failed to be converted" : "Aucun fichier n'a pu être converti", "One file could not be converted: {message}" : "Le fichier {message} n'a pas pu être converti", + "_One file could not be converted_::_%n files could not be converted_" : ["Un fichier n'a pas pu être converti","%n fichiers n'ont pas pu être convertis","%n fichiers n'ont pas pu être convertis"], + "_One file successfully converted_::_%n files successfully converted_" : ["Un fichier converti avec succès","%n fichiers convertis avec succès","%n fichiers convertis avec succès"], "Files successfully converted" : "Fichiers convertis avec succès", "Failed to convert files" : "Impossible de convertir les fichiers", "Converting file …" : "Conversion du fichier...", @@ -280,6 +292,7 @@ OC.L10N.register( "Open file locally" : "Ouvrir le fichier localement", "The file should now open on your device. If it doesn't, please check that you have the desktop app installed." : "Le fichier devrait maintenant s'ouvrir sur votre appareil. Si ce n'est pas le cas, vérifiez que vous avez installé l'application de bureau.", "Retry and close" : "Réessayer et fermer", + "Open online" : "Ouvrir en ligne", "Failed to redirect to client" : "Échec de la redirection vers le client", "Open locally" : "Ouvrir localement", "Rename" : "Renommer", @@ -325,6 +338,7 @@ OC.L10N.register( "Unexpected error: {error}" : "Erreur inattendue: {error}", "_%n file_::_%n files_" : ["%n fichier","%n fichiers","%n fichiers"], "_%n folder_::_%n folders_" : ["%n dossier","%n dossiers","%n dossiers"], + "_%n hidden_::_%n hidden_" : ["%n caché","%n cachés","%n cachés"], "Filename must not be empty." : "Le nom du fichier ne doit pas être vide.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" n'est pas autorisé dans un nom de fichier.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" est un nom réservé et il n'est pas autorisé dans les noms de fichier.", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 6d03efc424b..77f0ae5147d 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -69,6 +69,8 @@ "Transferred from %1$s on %2$s" : "Transféré de %1$s à %2$s", "Files compatibility" : "Compatibilité des fichiers", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Permet de restreindre les noms de fichiers pour s'assurer que les fichiers peuvent être synchronisés avec tous les clients. Par défaut, tous les noms de fichier valides sur POSIX (c'est à dire sur Linux ou MacOS) sont acceptés.", + "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Après avoir activé les noms de fichiers compatibles Windows, les fichiers existants ne peuvent plus être modifiés mais peuvent être renommés avec de nouveaux noms valides par leur propriétaire.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Il est également possible de migrer les fichiers automatiquement après avoir activé ce paramètre, veuillez vous référer à la documentation sur la commande occ.", "Enforce Windows compatibility" : "Forcer la compatibilité Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Cela va bloquer les noms de fichier non valides sur les systèmes Windows, comme utiliser des noms réservés ou des caractères spéciaux. Mais cela ne renforcera pas la compatibilité de la sensibilité à la casse.", "File Management" : "Gestion de fichiers", @@ -94,6 +96,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" renommé en \"{newName}\"", "Rename file" : "Renommer le fichier", "Folder" : "Dossier", + "Unknown file type" : "Type de fichier inconnu", + "{ext} image" : "{ext} image", + "{ext} video" : "{ext} vidéo", + "{ext} audio" : "{ext} audio", + "{ext} text" : "{ext} texte", "Pending" : "En attente", "Unknown date" : "Date inconnue", "Clear filter" : "Supprimer le filtre", @@ -104,6 +111,7 @@ "Total rows summary" : "Récapitulatif du nombre total de lignes", "Toggle selection for all files and folders" : "Basculer la sélection pour tous les fichiers et dossiers", "Name" : "Nom", + "File type" : "Type de fichier", "Size" : "Taille", "\"{displayName}\" failed on some elements" : "\"{displayName}\" a échoué pour certains éléments", "\"{displayName}\" batch action executed successfully" : "L’action « {displayName} » par lot a été exécutée avec succès", @@ -182,6 +190,7 @@ "Sort favorites first" : "Trier les favoris en premier", "Sort folders before files" : "Trier les dossiers avant les fichiers", "Show hidden files" : "Montrer les fichiers masqués", + "Show file type column" : "Afficher la colonne du type de fichier", "Crop image previews" : "Afficher en miniatures carrées", "Enable the grid view" : "Activer la vue en grille", "Enable folder tree" : "Activer l'arborescence des dossiers", @@ -192,6 +201,7 @@ "Use this address to access your Files via WebDAV" : "Utilisez cette adresse pour accéder à vos fichiers via WebDAV", "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Si vous avez activé le 2FA, vous devez créer et utiliser un nouveau mot de passe d'application en cliquant ici.", "Warnings" : "Avertissements", + "Prevent warning dialogs from open or reenable them." : "Empêchez l'ouverture des boîtes de dialogue d'avertissement ou réactivez-les.", "Show a warning dialog when changing a file extension." : "Afficher un avertissement quand l'extension du fichier est modifiée.", "Keyboard shortcuts" : "Raccourcis clavier", "Speed up your Files experience with these quick shortcuts." : "Accélérez votre expérience Fichiers avec ces raccourcis rapides.", @@ -233,6 +243,8 @@ "Failed to convert files: {message}" : "Impossible de convertir les fichiers : {message}", "All files failed to be converted" : "Aucun fichier n'a pu être converti", "One file could not be converted: {message}" : "Le fichier {message} n'a pas pu être converti", + "_One file could not be converted_::_%n files could not be converted_" : ["Un fichier n'a pas pu être converti","%n fichiers n'ont pas pu être convertis","%n fichiers n'ont pas pu être convertis"], + "_One file successfully converted_::_%n files successfully converted_" : ["Un fichier converti avec succès","%n fichiers convertis avec succès","%n fichiers convertis avec succès"], "Files successfully converted" : "Fichiers convertis avec succès", "Failed to convert files" : "Impossible de convertir les fichiers", "Converting file …" : "Conversion du fichier...", @@ -278,6 +290,7 @@ "Open file locally" : "Ouvrir le fichier localement", "The file should now open on your device. If it doesn't, please check that you have the desktop app installed." : "Le fichier devrait maintenant s'ouvrir sur votre appareil. Si ce n'est pas le cas, vérifiez que vous avez installé l'application de bureau.", "Retry and close" : "Réessayer et fermer", + "Open online" : "Ouvrir en ligne", "Failed to redirect to client" : "Échec de la redirection vers le client", "Open locally" : "Ouvrir localement", "Rename" : "Renommer", @@ -323,6 +336,7 @@ "Unexpected error: {error}" : "Erreur inattendue: {error}", "_%n file_::_%n files_" : ["%n fichier","%n fichiers","%n fichiers"], "_%n folder_::_%n folders_" : ["%n dossier","%n dossiers","%n dossiers"], + "_%n hidden_::_%n hidden_" : ["%n caché","%n cachés","%n cachés"], "Filename must not be empty." : "Le nom du fichier ne doit pas être vide.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" n'est pas autorisé dans un nom de fichier.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" est un nom réservé et il n'est pas autorisé dans les noms de fichier.", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 3d61616343b..6c16223edef 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -71,6 +71,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "%1$sから%2$sに転送", "Files compatibility" : "ファイルの互換性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "ファイルをすべてのクライアントと同期できるようにするために、ファイル名を制限することを許可します。デフォルトではPOSIX(LinuxやmacOSなど)で有効なすべてのファイル名が許可されています。", + "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Windows 互換のファイル名を有効にすると、既存のファイルは変更できなくなりますが、所有者が有効な新しいファイル名に変更できるようになります。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "この設定を有効にした後、自動的にファイルを移行することも可能です。occコマンドに関するドキュメントを参照してください。", "Enforce Windows compatibility" : "Windowsとの互換性を強制", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "予約名や特殊文字のような、Windowsシステムにおいて有効でないファイル名をブロックします。これは大文字、小文字の互換性を強制するものではありません。", "File Management" : "ファイル管理", @@ -96,6 +98,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" から \"{newName}\" に名前を変更済み", "Rename file" : "ファイル名の変更", "Folder" : "フォルダー", + "Unknown file type" : "不明なファイルタイプ", + "{ext} image" : "{ext}画像", + "{ext} video" : "{ext}ビデオ", + "{ext} audio" : "{ext}音声", + "{ext} text" : "{ext}テキスト", "Pending" : "保留中", "Unknown date" : "不明な日付", "Clear filter" : "フィルターをクリア", @@ -106,6 +113,7 @@ OC.L10N.register( "Total rows summary" : "総行数のサマリー", "Toggle selection for all files and folders" : "すべてのファイルとフォルダの選択を切り替える", "Name" : "名前", + "File type" : "ファイルの種類", "Size" : "サイズ", "\"{displayName}\" failed on some elements" : "いくつかの要素で \"{displayName}\" が失敗しました。", "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。", @@ -184,6 +192,7 @@ OC.L10N.register( "Sort favorites first" : "お気に入りを最初に並べる", "Sort folders before files" : "ファイルよりもフォルダを先に並べ替えます", "Show hidden files" : "隠しファイルを表示", + "Show file type column" : "ファイルの種類のカラムを表示する", "Crop image previews" : "プレビュー画像を切り抜く", "Enable the grid view" : "グリッド表示を有効にする", "Enable folder tree" : "フォルダーツリーを有効にする", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index e778a19f0bb..6e24c0a0326 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -69,6 +69,8 @@ "Transferred from %1$s on %2$s" : "%1$sから%2$sに転送", "Files compatibility" : "ファイルの互換性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "ファイルをすべてのクライアントと同期できるようにするために、ファイル名を制限することを許可します。デフォルトではPOSIX(LinuxやmacOSなど)で有効なすべてのファイル名が許可されています。", + "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Windows 互換のファイル名を有効にすると、既存のファイルは変更できなくなりますが、所有者が有効な新しいファイル名に変更できるようになります。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "この設定を有効にした後、自動的にファイルを移行することも可能です。occコマンドに関するドキュメントを参照してください。", "Enforce Windows compatibility" : "Windowsとの互換性を強制", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "予約名や特殊文字のような、Windowsシステムにおいて有効でないファイル名をブロックします。これは大文字、小文字の互換性を強制するものではありません。", "File Management" : "ファイル管理", @@ -94,6 +96,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" から \"{newName}\" に名前を変更済み", "Rename file" : "ファイル名の変更", "Folder" : "フォルダー", + "Unknown file type" : "不明なファイルタイプ", + "{ext} image" : "{ext}画像", + "{ext} video" : "{ext}ビデオ", + "{ext} audio" : "{ext}音声", + "{ext} text" : "{ext}テキスト", "Pending" : "保留中", "Unknown date" : "不明な日付", "Clear filter" : "フィルターをクリア", @@ -104,6 +111,7 @@ "Total rows summary" : "総行数のサマリー", "Toggle selection for all files and folders" : "すべてのファイルとフォルダの選択を切り替える", "Name" : "名前", + "File type" : "ファイルの種類", "Size" : "サイズ", "\"{displayName}\" failed on some elements" : "いくつかの要素で \"{displayName}\" が失敗しました。", "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。", @@ -182,6 +190,7 @@ "Sort favorites first" : "お気に入りを最初に並べる", "Sort folders before files" : "ファイルよりもフォルダを先に並べ替えます", "Show hidden files" : "隠しファイルを表示", + "Show file type column" : "ファイルの種類のカラムを表示する", "Crop image previews" : "プレビュー画像を切り抜く", "Enable the grid view" : "グリッド表示を有効にする", "Enable folder tree" : "フォルダーツリーを有効にする", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 65358d419aa..8e77d1b2bb5 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -99,6 +99,10 @@ OC.L10N.register( "Rename file" : "Renomear arquivo", "Folder" : "Pasta", "Unknown file type" : "Tipo de arquivo desconhecido", + "{ext} image" : "imagem {ext}", + "{ext} video" : "vídeo {ext}", + "{ext} audio" : "áudio {ext}", + "{ext} text" : "texto {ext}", "Pending" : "Pendente", "Unknown date" : "Data desconhecida", "Clear filter" : "Limpar filtro", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 7b39fa76f77..09de897bc56 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -97,6 +97,10 @@ "Rename file" : "Renomear arquivo", "Folder" : "Pasta", "Unknown file type" : "Tipo de arquivo desconhecido", + "{ext} image" : "imagem {ext}", + "{ext} video" : "vídeo {ext}", + "{ext} audio" : "áudio {ext}", + "{ext} text" : "texto {ext}", "Pending" : "Pendente", "Unknown date" : "Data desconhecida", "Clear filter" : "Limpar filtro", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index 2847bc373c7..ad6b2e96bf4 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -98,6 +98,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "Bytte namn på \"{oldName}\" till \"{newName}\"", "Rename file" : "Byt namn på fil", "Folder" : "Mapp", + "Unknown file type" : "Okänd filtyp", + "{ext} image" : "{ext} bild", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} ljud", + "{ext} text" : "{ext} text", "Pending" : "Väntar", "Unknown date" : "Okänt datum", "Clear filter" : "Rensa filter", @@ -108,6 +113,7 @@ OC.L10N.register( "Total rows summary" : "Sammanfattning antal rader", "Toggle selection for all files and folders" : "Växla markering för alla filer och mappar", "Name" : "Namn", + "File type" : "Filtyp", "Size" : "Storlek", "\"{displayName}\" failed on some elements" : "\"{displayName}\" misslyckades med vissa element", "\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts", @@ -186,6 +192,7 @@ OC.L10N.register( "Sort favorites first" : "Sortera favoriter först", "Sort folders before files" : "Sortera mappar före filer", "Show hidden files" : "Visa dolda filer", + "Show file type column" : "Visa kolumn för filtyp", "Crop image previews" : "Beskär förhandsgranskningar för bilder", "Enable the grid view" : "Aktivera rutnätsvy", "Enable folder tree" : "Aktivera mappträd", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index affd94daa75..514dd77aab7 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -96,6 +96,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "Bytte namn på \"{oldName}\" till \"{newName}\"", "Rename file" : "Byt namn på fil", "Folder" : "Mapp", + "Unknown file type" : "Okänd filtyp", + "{ext} image" : "{ext} bild", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} ljud", + "{ext} text" : "{ext} text", "Pending" : "Väntar", "Unknown date" : "Okänt datum", "Clear filter" : "Rensa filter", @@ -106,6 +111,7 @@ "Total rows summary" : "Sammanfattning antal rader", "Toggle selection for all files and folders" : "Växla markering för alla filer och mappar", "Name" : "Namn", + "File type" : "Filtyp", "Size" : "Storlek", "\"{displayName}\" failed on some elements" : "\"{displayName}\" misslyckades med vissa element", "\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts", @@ -184,6 +190,7 @@ "Sort favorites first" : "Sortera favoriter först", "Sort folders before files" : "Sortera mappar före filer", "Show hidden files" : "Visa dolda filer", + "Show file type column" : "Visa kolumn för filtyp", "Crop image previews" : "Beskär förhandsgranskningar för bilder", "Enable the grid view" : "Aktivera rutnätsvy", "Enable folder tree" : "Aktivera mappträd", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 24c6af3046f..b0cc1433457 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -98,6 +98,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "已将“{oldName}”重命名为“{newName}”", "Rename file" : "重命名文件", "Folder" : "文件夹", + "Unknown file type" : "未知文件类型", + "{ext} image" : "{ext} 图片", + "{ext} video" : "{ext} 视频", + "{ext} audio" : "{ext} 音频", + "{ext} text" : "{ext} 文本", "Pending" : "等待", "Unknown date" : "未知日期", "Clear filter" : "清除筛选", @@ -108,6 +113,7 @@ OC.L10N.register( "Total rows summary" : "总行摘要", "Toggle selection for all files and folders" : "切换所有文件和文件夹的选择", "Name" : "名称", + "File type" : "文件类型", "Size" : "大小", "\"{displayName}\" failed on some elements" : "“{displayName}”在某些元素上失败", "\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功", @@ -186,6 +192,7 @@ OC.L10N.register( "Sort favorites first" : "收藏排序优先", "Sort folders before files" : "将文件夹排在文件前面", "Show hidden files" : "显示隐藏文件", + "Show file type column" : "显示文件类型列", "Crop image previews" : "裁剪图片预览", "Enable the grid view" : "启用网格视图", "Enable folder tree" : "启用文件夹树", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index 6fb7facb3b6..e15d9f5b180 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -96,6 +96,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "已将“{oldName}”重命名为“{newName}”", "Rename file" : "重命名文件", "Folder" : "文件夹", + "Unknown file type" : "未知文件类型", + "{ext} image" : "{ext} 图片", + "{ext} video" : "{ext} 视频", + "{ext} audio" : "{ext} 音频", + "{ext} text" : "{ext} 文本", "Pending" : "等待", "Unknown date" : "未知日期", "Clear filter" : "清除筛选", @@ -106,6 +111,7 @@ "Total rows summary" : "总行摘要", "Toggle selection for all files and folders" : "切换所有文件和文件夹的选择", "Name" : "名称", + "File type" : "文件类型", "Size" : "大小", "\"{displayName}\" failed on some elements" : "“{displayName}”在某些元素上失败", "\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功", @@ -184,6 +190,7 @@ "Sort favorites first" : "收藏排序优先", "Sort folders before files" : "将文件夹排在文件前面", "Show hidden files" : "显示隐藏文件", + "Show file type column" : "显示文件类型列", "Crop image previews" : "裁剪图片预览", "Enable the grid view" : "启用网格视图", "Enable folder tree" : "启用文件夹树", diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index 5b593dc8428..af981fd94cc 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -98,6 +98,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "已將「{oldName}」重新命名為「{newName}」", "Rename file" : "重新命名檔案", "Folder" : "資料夾", + "Unknown file type" : "檔案類型不詳", + "{ext} image" : "{ext} 圖像", + "{ext} video" : "{ext} 視像", + "{ext} audio" : "{ext} 音頻", + "{ext} text" : "{ext} 文字", "Pending" : "待定的", "Unknown date" : "日期不詳", "Clear filter" : "清空過濾器", @@ -108,6 +113,7 @@ OC.L10N.register( "Total rows summary" : "總列摘要", "Toggle selection for all files and folders" : "切換所有檔案和資料夾的選擇", "Name" : "名稱", + "File type" : "檔案類型", "Size" : "大小", "\"{displayName}\" failed on some elements" : "“{displayName}” 在某些元素上失敗", "\"{displayName}\" batch action executed successfully" : "成功執行 “{displayName}” 批處理操作", @@ -186,6 +192,7 @@ OC.L10N.register( "Sort favorites first" : "先排序最愛", "Sort folders before files" : "將資料夾在檔案之前排序", "Show hidden files" : "顯示隱藏檔案", + "Show file type column" : "顯示檔案類型縱列", "Crop image previews" : "圖片裁剪預覽", "Enable the grid view" : "啟用網格檢視", "Enable folder tree" : "啟用資料夾樹狀結構", diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index 927fc7dc8ef..e04500132ed 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -96,6 +96,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "已將「{oldName}」重新命名為「{newName}」", "Rename file" : "重新命名檔案", "Folder" : "資料夾", + "Unknown file type" : "檔案類型不詳", + "{ext} image" : "{ext} 圖像", + "{ext} video" : "{ext} 視像", + "{ext} audio" : "{ext} 音頻", + "{ext} text" : "{ext} 文字", "Pending" : "待定的", "Unknown date" : "日期不詳", "Clear filter" : "清空過濾器", @@ -106,6 +111,7 @@ "Total rows summary" : "總列摘要", "Toggle selection for all files and folders" : "切換所有檔案和資料夾的選擇", "Name" : "名稱", + "File type" : "檔案類型", "Size" : "大小", "\"{displayName}\" failed on some elements" : "“{displayName}” 在某些元素上失敗", "\"{displayName}\" batch action executed successfully" : "成功執行 “{displayName}” 批處理操作", @@ -184,6 +190,7 @@ "Sort favorites first" : "先排序最愛", "Sort folders before files" : "將資料夾在檔案之前排序", "Show hidden files" : "顯示隱藏檔案", + "Show file type column" : "顯示檔案類型縱列", "Crop image previews" : "圖片裁剪預覽", "Enable the grid view" : "啟用網格檢視", "Enable folder tree" : "啟用資料夾樹狀結構", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 51c97322725..4ff34d480e5 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -99,6 +99,10 @@ OC.L10N.register( "Rename file" : "重新命名檔案", "Folder" : "資料夾", "Unknown file type" : "未知檔案類型", + "{ext} image" : "{ext} 影像", + "{ext} video" : "{ext} 視訊", + "{ext} audio" : "{ext} 音訊", + "{ext} text" : "{ext} 文字", "Pending" : "待處理", "Unknown date" : "未知日期", "Clear filter" : "清除過濾條件", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index ead55fc3891..0def7339d4d 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -97,6 +97,10 @@ "Rename file" : "重新命名檔案", "Folder" : "資料夾", "Unknown file type" : "未知檔案類型", + "{ext} image" : "{ext} 影像", + "{ext} video" : "{ext} 視訊", + "{ext} audio" : "{ext} 音訊", + "{ext} text" : "{ext} 文字", "Pending" : "待處理", "Unknown date" : "未知日期", "Clear filter" : "清除過濾條件", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 34809db9d1d..bb6ed322fea 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -7,6 +7,7 @@ OC.L10N.register( "Error configuring OAuth2" : "Erreur lors de la configuration de OAuth2", "Generate keys" : "Générer des clés", "Error generating key pair" : "Erreur lors de la génération des clés", + "Permission denied" : "Autorisation refusée", "Forbidden to manage local mounts" : "Interdiction de gérer les montages locaux.", "Storage with ID \"%d\" not found" : "Stockage avec l'ID \"%d\" non trouvé", "Invalid backend or authentication mechanism class" : "Service ou méthode d'authentification non valable", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index e36b5cd05f8..23e6346641f 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -5,6 +5,7 @@ "Error configuring OAuth2" : "Erreur lors de la configuration de OAuth2", "Generate keys" : "Générer des clés", "Error generating key pair" : "Erreur lors de la génération des clés", + "Permission denied" : "Autorisation refusée", "Forbidden to manage local mounts" : "Interdiction de gérer les montages locaux.", "Storage with ID \"%d\" not found" : "Stockage avec l'ID \"%d\" non trouvé", "Invalid backend or authentication mechanism class" : "Service ou méthode d'authentification non valable", diff --git a/apps/files_reminders/l10n/fr.js b/apps/files_reminders/l10n/fr.js index 5db5e281323..7faf292ac61 100644 --- a/apps/files_reminders/l10n/fr.js +++ b/apps/files_reminders/l10n/fr.js @@ -5,15 +5,18 @@ OC.L10N.register( "Reminder for {name}" : "Rappel pour {name}", "View file" : "Voir le fichier", "View folder" : "Voir le dossier", + "Files reminder" : "Rappel des fichiers", + "The \"files_reminders\" app can work properly." : "L'application « files_reminders » peut fonctionner correctement.", + "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "L'application « files_reminders » a besoin de l'application de notifications pour fonctionner correctement. Vous devez activer les notifications ou désactiver « files_reminder ».", "Set file reminders" : "Définir des rappels pour des fichiers", "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 Rappels de fichiers**\n\nDéfinit des rappels de fichiers.\n\nNote: pour utiliser l'application `Rappels de fichiers`, assurez-vous que l'application `Notifications` est installée et activée. L'application `Notifications` fournit les APIs nécessaires pour que l'application `Rappels de fichiers` fonctionne correctement.", - "Set reminder for \"{fileName}\"" : "Définir un rappel pour « {fileName} »", + "Set reminder for \"{fileName}\"" : "Définir un rappel pour « {fileName} »", "Set reminder at custom date & time" : "Définition d'un rappel à une date et une heure personnalisées", "Clear reminder" : "Effacer le rappel", "Please choose a valid date & time" : "Veuillez choisir une date et une heure valables", "Reminder set for \"{fileName}\"" : "Définition d’un rappel pour « {fileName} »", "Failed to set reminder" : "Échec de la définition du rappel", - "Reminder cleared for \"{fileName}\"" : "Rappel effacé pour « {fileName} »", + "Reminder cleared for \"{fileName}\"" : "Rappel effacé pour « {fileName} »", "Failed to clear reminder" : "Échec de l'effacement du rappel", "We will remind you of this file" : "Nous vous rappellerons de ce fichier", "Cancel" : "Annuler", @@ -27,6 +30,8 @@ OC.L10N.register( "This weekend" : "Ce week-end", "Set reminder for this weekend" : "Définir un rappel pour ce week-end", "Next week" : "Semaine suivante", - "Set reminder for next week" : "Définir un rappel pour la semaine prochaine" + "Set reminder for next week" : "Définir un rappel pour la semaine prochaine", + "This files_reminder can work properly." : "Ce fichier_reminder peut fonctionner correctement.", + "The files_reminder app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "L'application files_reminder a besoin de l'application de notifications pour fonctionner correctement. Vous devez activer les notifications ou désactiver files_reminder." }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_reminders/l10n/fr.json b/apps/files_reminders/l10n/fr.json index 2d876b6080e..17f299e934e 100644 --- a/apps/files_reminders/l10n/fr.json +++ b/apps/files_reminders/l10n/fr.json @@ -3,15 +3,18 @@ "Reminder for {name}" : "Rappel pour {name}", "View file" : "Voir le fichier", "View folder" : "Voir le dossier", + "Files reminder" : "Rappel des fichiers", + "The \"files_reminders\" app can work properly." : "L'application « files_reminders » peut fonctionner correctement.", + "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "L'application « files_reminders » a besoin de l'application de notifications pour fonctionner correctement. Vous devez activer les notifications ou désactiver « files_reminder ».", "Set file reminders" : "Définir des rappels pour des fichiers", "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 Rappels de fichiers**\n\nDéfinit des rappels de fichiers.\n\nNote: pour utiliser l'application `Rappels de fichiers`, assurez-vous que l'application `Notifications` est installée et activée. L'application `Notifications` fournit les APIs nécessaires pour que l'application `Rappels de fichiers` fonctionne correctement.", - "Set reminder for \"{fileName}\"" : "Définir un rappel pour « {fileName} »", + "Set reminder for \"{fileName}\"" : "Définir un rappel pour « {fileName} »", "Set reminder at custom date & time" : "Définition d'un rappel à une date et une heure personnalisées", "Clear reminder" : "Effacer le rappel", "Please choose a valid date & time" : "Veuillez choisir une date et une heure valables", "Reminder set for \"{fileName}\"" : "Définition d’un rappel pour « {fileName} »", "Failed to set reminder" : "Échec de la définition du rappel", - "Reminder cleared for \"{fileName}\"" : "Rappel effacé pour « {fileName} »", + "Reminder cleared for \"{fileName}\"" : "Rappel effacé pour « {fileName} »", "Failed to clear reminder" : "Échec de l'effacement du rappel", "We will remind you of this file" : "Nous vous rappellerons de ce fichier", "Cancel" : "Annuler", @@ -25,6 +28,8 @@ "This weekend" : "Ce week-end", "Set reminder for this weekend" : "Définir un rappel pour ce week-end", "Next week" : "Semaine suivante", - "Set reminder for next week" : "Définir un rappel pour la semaine prochaine" + "Set reminder for next week" : "Définir un rappel pour la semaine prochaine", + "This files_reminder can work properly." : "Ce fichier_reminder peut fonctionner correctement.", + "The files_reminder app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "L'application files_reminder a besoin de l'application de notifications pour fonctionner correctement. Vous devez activer les notifications ou désactiver files_reminder." },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index f6aa0685ab2..e686a33970e 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -182,7 +182,7 @@ OC.L10N.register( "Choose a default folder for accepted shares" : "Einen Standardordner für akzeptierte Freigaben wählen", "Invalid path selected" : "Ungültigen Pfad ausgewählt", "Unknown error" : "Unbekannter Fehler", - "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen", + "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", "Share expiration: " : "Freigabe-Ablaufdatum:", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 52b17773dbd..a797c90fe56 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -180,7 +180,7 @@ "Choose a default folder for accepted shares" : "Einen Standardordner für akzeptierte Freigaben wählen", "Invalid path selected" : "Ungültigen Pfad ausgewählt", "Unknown error" : "Unbekannter Fehler", - "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen", + "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", "Share expiration: " : "Freigabe-Ablaufdatum:", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index 1269c6a0cfb..608e60101c9 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -182,7 +182,7 @@ OC.L10N.register( "Choose a default folder for accepted shares" : "Wählen Sie einen Standardordner für akzeptierte Freigaben", "Invalid path selected" : "Ungültiger Pfad ausgewählt", "Unknown error" : "Unbekannter Fehler", - "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen", + "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", "Share expiration: " : "Freigabe-Ablaufdatum:", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 0a61a725d3e..97c1ac18a7c 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -180,7 +180,7 @@ "Choose a default folder for accepted shares" : "Wählen Sie einen Standardordner für akzeptierte Freigaben", "Invalid path selected" : "Ungültiger Pfad ausgewählt", "Unknown error" : "Unbekannter Fehler", - "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen", + "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", "Share expiration: " : "Freigabe-Ablaufdatum:", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 3f64ecb6e64..9c7ff96e94d 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -185,6 +185,8 @@ OC.L10N.register( "Set default folder for accepted shares" : "Définir le dossier par défaut pour les partages acceptés", "Reset" : "Réinitialiser", "Reset folder to system default" : "Réinitialiser le dossier par défaut du système", + "Share expiration: " : "Expiration du partage :", + "Share Expiration" : "Expiration du partage", "group" : "groupe", "conversation" : "conversation", "remote" : "distant", @@ -311,7 +313,9 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilisez cette méthode pour partager des fichiers avec des personnes ou des équipes au sein de votre organisation. Si le destinataire a déjà accès au partage, mais ne parvient pas à le localiser, vous pouvez lui envoyer le lien interne pour faciliter l'accès.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Cette méthode permet de partager des fichiers avec des personnes ou des organisations extérieures à votre organisation. Les fichiers et les dossiers peuvent être partagés via des liens de partage publics et des adresses e-mail. Vous pouvez également partager avec d'autres comptes Nextcloud hébergés sur différentes instances en utilisant leur ID de cloud fédéré.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Partages qui ne font pas partie des partages internes ou externes. Il peut s'agir de partages provenant d'applications ou d'autres sources.", + "Share with accounts, teams, federated cloud IDs" : "Partager avec des comptes, des équipes et des IDs cloud fédérés", "Share with accounts and teams" : "Partager avec des comptes et des équipes", + "Email, federated cloud ID" : "E-mail, ID cloud fédéré", "Unable to load the shares list" : "Impossible de charger la liste des partages", "Expires {relativetime}" : "Expire {relativetime}", "this share just expired." : "ce partage vient d'expirer", @@ -420,6 +424,7 @@ OC.L10N.register( "You are not allowed to edit link shares that you don't own" : "Vous n'êtes pas autorisé à modifier les liens de partage dont vous n'êtes pas propriétaire", "_1 email address already added_::_{count} email addresses already added_" : ["1 adresse mail déjà ajoutée"," {count}adresses email déjà ajoutées","{count} adresses e-mail déjà ajoutées"], "_1 email address added_::_{count} email addresses added_" : [" 1 adresse mail ajoutée","{count} adresses mail ajoutées","{count} adresses mail ajoutées"], + "Share with accounts, teams, federated cloud id" : "Partager avec des comptes, des équipes, un identifiant de cloud fédéré", "Email, federated cloud id" : "E-mail, ID de cloud fédéré" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index 412370041ff..b08514d8c1f 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -183,6 +183,8 @@ "Set default folder for accepted shares" : "Définir le dossier par défaut pour les partages acceptés", "Reset" : "Réinitialiser", "Reset folder to system default" : "Réinitialiser le dossier par défaut du système", + "Share expiration: " : "Expiration du partage :", + "Share Expiration" : "Expiration du partage", "group" : "groupe", "conversation" : "conversation", "remote" : "distant", @@ -309,7 +311,9 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilisez cette méthode pour partager des fichiers avec des personnes ou des équipes au sein de votre organisation. Si le destinataire a déjà accès au partage, mais ne parvient pas à le localiser, vous pouvez lui envoyer le lien interne pour faciliter l'accès.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Cette méthode permet de partager des fichiers avec des personnes ou des organisations extérieures à votre organisation. Les fichiers et les dossiers peuvent être partagés via des liens de partage publics et des adresses e-mail. Vous pouvez également partager avec d'autres comptes Nextcloud hébergés sur différentes instances en utilisant leur ID de cloud fédéré.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Partages qui ne font pas partie des partages internes ou externes. Il peut s'agir de partages provenant d'applications ou d'autres sources.", + "Share with accounts, teams, federated cloud IDs" : "Partager avec des comptes, des équipes et des IDs cloud fédérés", "Share with accounts and teams" : "Partager avec des comptes et des équipes", + "Email, federated cloud ID" : "E-mail, ID cloud fédéré", "Unable to load the shares list" : "Impossible de charger la liste des partages", "Expires {relativetime}" : "Expire {relativetime}", "this share just expired." : "ce partage vient d'expirer", @@ -418,6 +422,7 @@ "You are not allowed to edit link shares that you don't own" : "Vous n'êtes pas autorisé à modifier les liens de partage dont vous n'êtes pas propriétaire", "_1 email address already added_::_{count} email addresses already added_" : ["1 adresse mail déjà ajoutée"," {count}adresses email déjà ajoutées","{count} adresses e-mail déjà ajoutées"], "_1 email address added_::_{count} email addresses added_" : [" 1 adresse mail ajoutée","{count} adresses mail ajoutées","{count} adresses mail ajoutées"], + "Share with accounts, teams, federated cloud id" : "Partager avec des comptes, des équipes, un identifiant de cloud fédéré", "Email, federated cloud id" : "E-mail, ID de cloud fédéré" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 062614d2fe3..dfbb41c95cc 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -313,7 +313,9 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "組織内の個人またはチームとファイルを共有するには、この方法を使用します。受信者がすでに共有にアクセスできるが、その場所を見つけられない場合は、簡単にアクセスできるように内部共有リンクを送信できます。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "組織外の個人や組織とファイルを共有するには、この方法を使用します。ファイルやフォルダは、パブリック共有リンクやメールアドレスで共有できます。また、連携クラウドIDを使用して、異なるインスタンスにホストされている他のNextcloudアカウントと共有することもできます。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "内部または外部共有に含まれない共有。これはアプリや他のソースからの共有になります。", + "Share with accounts, teams, federated cloud IDs" : "アカウント、チーム、連携クラウドIDとの共有", "Share with accounts and teams" : "アカウントとチームで共有", + "Email, federated cloud ID" : "電子メール、連携クラウドID", "Unable to load the shares list" : "共有リストを読み込めません", "Expires {relativetime}" : "有効期限 {relativetime}", "this share just expired." : "この共有は期限切れになりました。", @@ -422,6 +424,7 @@ OC.L10N.register( "You are not allowed to edit link shares that you don't own" : "あなたが所有していない共有リンクを編集することは許可されていません", "_1 email address already added_::_{count} email addresses already added_" : ["{count} メールアドレスはすでに追加されています"], "_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"], + "Share with accounts, teams, federated cloud id" : "アカウント、チーム、連携クラウドIDで共有", "Email, federated cloud id" : "電子メール、連携クラウドID" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index c2657abce02..67b977bbe3b 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -311,7 +311,9 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "組織内の個人またはチームとファイルを共有するには、この方法を使用します。受信者がすでに共有にアクセスできるが、その場所を見つけられない場合は、簡単にアクセスできるように内部共有リンクを送信できます。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "組織外の個人や組織とファイルを共有するには、この方法を使用します。ファイルやフォルダは、パブリック共有リンクやメールアドレスで共有できます。また、連携クラウドIDを使用して、異なるインスタンスにホストされている他のNextcloudアカウントと共有することもできます。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "内部または外部共有に含まれない共有。これはアプリや他のソースからの共有になります。", + "Share with accounts, teams, federated cloud IDs" : "アカウント、チーム、連携クラウドIDとの共有", "Share with accounts and teams" : "アカウントとチームで共有", + "Email, federated cloud ID" : "電子メール、連携クラウドID", "Unable to load the shares list" : "共有リストを読み込めません", "Expires {relativetime}" : "有効期限 {relativetime}", "this share just expired." : "この共有は期限切れになりました。", @@ -420,6 +422,7 @@ "You are not allowed to edit link shares that you don't own" : "あなたが所有していない共有リンクを編集することは許可されていません", "_1 email address already added_::_{count} email addresses already added_" : ["{count} メールアドレスはすでに追加されています"], "_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"], + "Share with accounts, teams, federated cloud id" : "アカウント、チーム、連携クラウドIDで共有", "Email, federated cloud id" : "電子メール、連携クラウドID" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_trashbin/l10n/fr.js b/apps/files_trashbin/l10n/fr.js index dd615fab5fb..db2e6d58272 100644 --- a/apps/files_trashbin/l10n/fr.js +++ b/apps/files_trashbin/l10n/fr.js @@ -5,7 +5,7 @@ OC.L10N.register( "Deleted files" : "Fichiers supprimés", "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Dossiers et fichiers supprimés dans la corbeille (peuvent expirer pendant l'export s'il reste peu d'espace disque)", "This application enables people to restore files that were deleted from the system." : "Cette application permet aux personnes de restaurer des fichiers qui ont été supprimés du système.", - "This application enables people to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the people file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent an account from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Cette application permet aux personnes de restaurer les fichiers qui ont été supprimés du système. Il affiche une liste de fichiers supprimés dans l'interface Web et dispose d'options pour restaurer ces fichiers supprimés dans les dossiers de fichiers des personnes ou les supprimer définitivement du système. La restauration d'un fichier restaure également les versions de fichiers associées, si l'application de versions est activée. Lorsqu'un fichier est supprimé d'un partage, il peut être restauré de la même manière, bien qu'il ne soit plus partagé. Par défaut, ces fichiers restent dans la corbeille pendant 30 jours.\n\nPour empêcher un compte de manquer d'espace disque, l'application Fichiers supprimés n'utilisera pas plus de 50 % du quota gratuit actuellement disponible pour les fichiers supprimés. Si les fichiers supprimés dépassent cette limite, l'application supprime les fichiers les plus anciens jusqu'à ce qu'elle soit inférieure à cette limite. Plus d'informations sont disponibles dans la documentation Fichiers supprimés.", + "This application enables people to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the people file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent an account from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Cette application permet aux personnes de restaurer les fichiers qui ont été supprimés du système. Il affiche une liste de fichiers supprimés dans l'interface Web et dispose d'options pour restaurer ces fichiers supprimés dans les dossiers de fichiers des personnes ou les supprimer définitivement du système. La restauration d'un fichier restaure également les versions de fichiers associées, si l'application de versions est activée. Lorsqu'un fichier est supprimé d'un partage, il peut être restauré de la même manière, bien qu'il ne soit plus partagé. Par défaut, ces fichiers restent dans la corbeille pendant 30 jours.\n\nPour empêcher un compte de manquer d'espace disque, l'application \"Fichiers supprimés\" n'utilisera pas plus de 50 % du quota actuellement disponible pour les fichiers supprimés. Si les fichiers supprimés dépassent cette limite, l'application supprime les fichiers les plus anciens jusqu'à ce qu'elle soit inférieure à cette limite. Plus d'informations sont disponibles dans la documentation Fichiers supprimés.", "Restore" : "Restaurer", "Empty deleted files" : "Vider les fichiers supprimés", "Confirm permanent deletion" : "Confirmer la suppression définitive", diff --git a/apps/files_trashbin/l10n/fr.json b/apps/files_trashbin/l10n/fr.json index e3f17f80b64..2c27f497191 100644 --- a/apps/files_trashbin/l10n/fr.json +++ b/apps/files_trashbin/l10n/fr.json @@ -3,7 +3,7 @@ "Deleted files" : "Fichiers supprimés", "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Dossiers et fichiers supprimés dans la corbeille (peuvent expirer pendant l'export s'il reste peu d'espace disque)", "This application enables people to restore files that were deleted from the system." : "Cette application permet aux personnes de restaurer des fichiers qui ont été supprimés du système.", - "This application enables people to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the people file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent an account from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Cette application permet aux personnes de restaurer les fichiers qui ont été supprimés du système. Il affiche une liste de fichiers supprimés dans l'interface Web et dispose d'options pour restaurer ces fichiers supprimés dans les dossiers de fichiers des personnes ou les supprimer définitivement du système. La restauration d'un fichier restaure également les versions de fichiers associées, si l'application de versions est activée. Lorsqu'un fichier est supprimé d'un partage, il peut être restauré de la même manière, bien qu'il ne soit plus partagé. Par défaut, ces fichiers restent dans la corbeille pendant 30 jours.\n\nPour empêcher un compte de manquer d'espace disque, l'application Fichiers supprimés n'utilisera pas plus de 50 % du quota gratuit actuellement disponible pour les fichiers supprimés. Si les fichiers supprimés dépassent cette limite, l'application supprime les fichiers les plus anciens jusqu'à ce qu'elle soit inférieure à cette limite. Plus d'informations sont disponibles dans la documentation Fichiers supprimés.", + "This application enables people to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the people file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent an account from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Cette application permet aux personnes de restaurer les fichiers qui ont été supprimés du système. Il affiche une liste de fichiers supprimés dans l'interface Web et dispose d'options pour restaurer ces fichiers supprimés dans les dossiers de fichiers des personnes ou les supprimer définitivement du système. La restauration d'un fichier restaure également les versions de fichiers associées, si l'application de versions est activée. Lorsqu'un fichier est supprimé d'un partage, il peut être restauré de la même manière, bien qu'il ne soit plus partagé. Par défaut, ces fichiers restent dans la corbeille pendant 30 jours.\n\nPour empêcher un compte de manquer d'espace disque, l'application \"Fichiers supprimés\" n'utilisera pas plus de 50 % du quota actuellement disponible pour les fichiers supprimés. Si les fichiers supprimés dépassent cette limite, l'application supprime les fichiers les plus anciens jusqu'à ce qu'elle soit inférieure à cette limite. Plus d'informations sont disponibles dans la documentation Fichiers supprimés.", "Restore" : "Restaurer", "Empty deleted files" : "Vider les fichiers supprimés", "Confirm permanent deletion" : "Confirmer la suppression définitive", diff --git a/apps/files_versions/l10n/fr.js b/apps/files_versions/l10n/fr.js index 34d2e110a98..88e5299734e 100644 --- a/apps/files_versions/l10n/fr.js +++ b/apps/files_versions/l10n/fr.js @@ -23,6 +23,7 @@ OC.L10N.register( "Version restored" : "Version restaurée", "Could not restore version" : "Impossible de restaurer la version", "Could not set version label" : "Impossible de définir l'étiquette de version", - "Could not delete version" : "Impossible de supprimer la version" + "Could not delete version" : "Impossible de supprimer la version", + "File versions" : "Versions des fichiers" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_versions/l10n/fr.json b/apps/files_versions/l10n/fr.json index 3e5343e93dc..e59d1f3e59c 100644 --- a/apps/files_versions/l10n/fr.json +++ b/apps/files_versions/l10n/fr.json @@ -21,6 +21,7 @@ "Version restored" : "Version restaurée", "Could not restore version" : "Impossible de restaurer la version", "Could not set version label" : "Impossible de définir l'étiquette de version", - "Could not delete version" : "Impossible de supprimer la version" + "Could not delete version" : "Impossible de supprimer la version", + "File versions" : "Versions des fichiers" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 19e7dd598ae..4b58d721583 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -23,6 +23,7 @@ use OCA\Files_Versions\Versions\IVersionManager; use OCP\AppFramework\Db\DoesNotExistException; use OCP\Command\IBus; use OCP\EventDispatcher\IEventDispatcher; +use OCP\Files; use OCP\Files\FileInfo; use OCP\Files\Folder; use OCP\Files\IMimeTypeDetector; @@ -32,6 +33,7 @@ use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\Files\Search\ISearchBinaryOperator; use OCP\Files\Search\ISearchComparison; +use OCP\Files\Storage\IWriteStreamStorage; use OCP\Files\StorageInvalidException; use OCP\Files\StorageNotAvailableException; use OCP\IURLGenerator; @@ -416,12 +418,25 @@ class Storage { try { // TODO add a proper way of overwriting a file while maintaining file ids - if ($storage1->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage') || $storage2->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage')) { + if ($storage1->instanceOfStorage(\OC\Files\ObjectStore\ObjectStoreStorage::class) + || $storage2->instanceOfStorage(\OC\Files\ObjectStore\ObjectStoreStorage::class) + ) { $source = $storage1->fopen($internalPath1, 'r'); - $target = $storage2->fopen($internalPath2, 'w'); - [, $result] = \OC_Helper::streamCopy($source, $target); - fclose($source); - fclose($target); + $result = $source !== false; + if ($result) { + if ($storage2->instanceOfStorage(IWriteStreamStorage::class)) { + /** @var IWriteStreamStorage $storage2 */ + $storage2->writeStream($internalPath2, $source); + } else { + $target = $storage2->fopen($internalPath2, 'w'); + $result = $target !== false; + if ($target !== false) { + [, $result] = Files::streamCopy($source, $target, true); + fclose($target); + } + } + fclose($source); + } if ($result !== false) { $storage1->unlink($internalPath1); diff --git a/apps/provisioning_api/tests/CapabilitiesTest.php b/apps/provisioning_api/tests/CapabilitiesTest.php index e3c14f37ed7..67a0335829c 100644 --- a/apps/provisioning_api/tests/CapabilitiesTest.php +++ b/apps/provisioning_api/tests/CapabilitiesTest.php @@ -1,9 +1,11 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Provisioning_API\Tests\unit; +namespace OCA\Provisioning_API\Tests; use OCA\FederatedFileSharing\FederatedShareProvider; use OCA\Provisioning_API\Capabilities; @@ -21,11 +23,8 @@ use Test\TestCase; */ class CapabilitiesTest extends TestCase { - /** @var Capabilities */ - protected $capabilities; - - /** @var IAppManager|MockObject */ - protected $appManager; + protected IAppManager&MockObject $appManager; + protected Capabilities $capabilities; public function setUp(): void { parent::setUp(); @@ -38,7 +37,7 @@ class CapabilitiesTest extends TestCase { ->willReturn('1.12'); } - public function getCapabilitiesProvider() { + public static function getCapabilitiesProvider(): array { return [ [true, false, false, true, false], [true, true, false, true, false], @@ -52,7 +51,7 @@ class CapabilitiesTest extends TestCase { /** * @dataProvider getCapabilitiesProvider */ - public function testGetCapabilities($federationAppEnabled, $federatedFileSharingAppEnabled, $lookupServerEnabled, $expectedFederatedScopeEnabled, $expectedPublishedScopeEnabled): void { + public function testGetCapabilities(bool $federationAppEnabled, bool $federatedFileSharingAppEnabled, bool $lookupServerEnabled, bool $expectedFederatedScopeEnabled, bool $expectedPublishedScopeEnabled): void { $this->appManager->expects($this->any()) ->method('isEnabledForUser') ->will($this->returnValueMap([ diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php index 41739b6283f..3d2c1645d25 100644 --- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php +++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -30,7 +32,6 @@ use function json_encode; * @package OCA\Provisioning_API\Tests */ class AppConfigControllerTest extends TestCase { - private IAppConfig&MockObject $appConfig; private IUserSession&MockObject $userSession; private IL10N&MockObject $l10n; @@ -51,7 +52,7 @@ class AppConfigControllerTest extends TestCase { /** * @param string[] $methods - * @return AppConfigController|\PHPUnit\Framework\MockObject\MockObject + * @return AppConfigController|MockObject */ protected function getInstance(array $methods = []) { $request = $this->createMock(IRequest::class); @@ -79,7 +80,7 @@ class AppConfigControllerTest extends TestCase { $this->settingManager, $this->appManager, ]) - ->setMethods($methods) + ->onlyMethods($methods) ->getMock(); } } @@ -95,7 +96,7 @@ class AppConfigControllerTest extends TestCase { $this->assertEquals(['data' => ['apps']], $result->getData()); } - public function dataGetKeys() { + public static function dataGetKeys(): array { return [ ['app1 ', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN], ['app2', ['keys'], null, Http::STATUS_OK], @@ -104,12 +105,8 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataGetKeys - * @param string $app - * @param array|null $keys - * @param \Exception|null $throws - * @param int $status */ - public function testGetKeys($app, $keys, $throws, $status): void { + public function testGetKeys(string $app, ?array $keys, ?\Throwable $throws, int $status): void { $api = $this->getInstance(['verifyAppId']); if ($throws instanceof \Exception) { $api->expects($this->once()) @@ -140,7 +137,7 @@ class AppConfigControllerTest extends TestCase { } } - public function dataGetValue() { + public static function dataGetValue(): array { return [ ['app1', 'key', 'default', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN], ['app2', 'key', 'default', 'return', null, Http::STATUS_OK], @@ -149,14 +146,8 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataGetValue - * @param string $app - * @param string|null $key - * @param string|null $default - * @param string|null $return - * @param \Exception|null $throws - * @param int $status */ - public function testGetValue($app, $key, $default, $return, $throws, $status): void { + public function testGetValue(string $app, string $key, string $default, ?string $return, ?\Throwable $throws, int $status): void { $api = $this->getInstance(['verifyAppId']); if ($throws instanceof \Exception) { $api->expects($this->once()) @@ -184,7 +175,7 @@ class AppConfigControllerTest extends TestCase { } } - public function dataSetValue() { + public static function dataSetValue(): array { return [ ['app1', 'key', 'default', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN], ['app2', 'key', 'default', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN], @@ -201,14 +192,8 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataSetValue - * @param string $app - * @param string|null $key - * @param string|null $value - * @param \Exception|null $appThrows - * @param \Exception|null $keyThrows - * @param int|\Throwable $status */ - public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int|\Throwable $type = IAppConfig::VALUE_MIXED): void { + public function testSetValue(string $app, string $key, string $value, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status, int|\Throwable $type = IAppConfig::VALUE_MIXED): void { $adminUser = $this->createMock(IUser::class); $adminUser->expects($this->once()) ->method('getUid') @@ -297,7 +282,7 @@ class AppConfigControllerTest extends TestCase { } } - public function dataDeleteValue() { + public static function dataDeleteValue(): array { return [ ['app1', 'key', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN], ['app2', 'key', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN], @@ -307,13 +292,8 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataDeleteValue - * @param string $app - * @param string|null $key - * @param \Exception|null $appThrows - * @param \Exception|null $keyThrows - * @param int $status */ - public function testDeleteValue($app, $key, $appThrows, $keyThrows, $status): void { + public function testDeleteValue(string $app, string $key, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status): void { $api = $this->getInstance(['verifyAppId', 'verifyConfigKey']); if ($appThrows instanceof \Exception) { $api->expects($this->once()) @@ -367,7 +347,7 @@ class AppConfigControllerTest extends TestCase { $this->addToAssertionCount(1); } - public function dataVerifyAppIdThrows() { + public static function dataVerifyAppIdThrows(): array { return [ ['activity..'], ['activity/'], @@ -378,16 +358,15 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataVerifyAppIdThrows - * @param string $app */ - public function testVerifyAppIdThrows($app): void { + public function testVerifyAppIdThrows(string $app): void { $this->expectException(\InvalidArgumentException::class); $api = $this->getInstance(); $this->invokePrivate($api, 'verifyAppId', [$app]); } - public function dataVerifyConfigKey() { + public static function dataVerifyConfigKey(): array { return [ ['activity', 'abc', ''], ['dav', 'public_route', ''], @@ -398,17 +377,14 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataVerifyConfigKey - * @param string $app - * @param string $key - * @param string $value */ - public function testVerifyConfigKey($app, $key, $value): void { + public function testVerifyConfigKey(string $app, string $key, string $value): void { $api = $this->getInstance(); $this->invokePrivate($api, 'verifyConfigKey', [$app, $key, $value]); $this->addToAssertionCount(1); } - public function dataVerifyConfigKeyThrows() { + public static function dataVerifyConfigKeyThrows(): array { return [ ['activity', 'installed_version', ''], ['calendar', 'enabled', ''], @@ -424,11 +400,8 @@ class AppConfigControllerTest extends TestCase { /** * @dataProvider dataVerifyConfigKeyThrows - * @param string $app - * @param string $key - * @param string $value */ - public function testVerifyConfigKeyThrows($app, $key, $value): void { + public function testVerifyConfigKeyThrows(string $app, string $key, string $value): void { $this->expectException(\InvalidArgumentException::class); $api = $this->getInstance(); diff --git a/apps/provisioning_api/tests/Controller/AppsControllerTest.php b/apps/provisioning_api/tests/Controller/AppsControllerTest.php index bbcabfddd8b..f56be7c4c36 100644 --- a/apps/provisioning_api/tests/Controller/AppsControllerTest.php +++ b/apps/provisioning_api/tests/Controller/AppsControllerTest.php @@ -24,12 +24,9 @@ use OCP\Server; * @package OCA\Provisioning_API\Tests */ class AppsControllerTest extends TestCase { - /** @var IAppManager */ - private $appManager; - /** @var AppsController */ - private $api; - /** @var IUserSession */ - private $userSession; + private IAppManager $appManager; + private AppsController $api; + private IUserSession $userSession; protected function setUp(): void { parent::setUp(); @@ -38,9 +35,7 @@ class AppsControllerTest extends TestCase { $this->groupManager = Server::get(IGroupManager::class); $this->userSession = Server::get(IUserSession::class); - $request = $this->getMockBuilder(IRequest::class) - ->disableOriginalConstructor() - ->getMock(); + $request = $this->createMock(IRequest::class); $this->api = new AppsController( 'provisioning_api', @@ -96,7 +91,7 @@ class AppsControllerTest extends TestCase { $this->assertEquals(count($disabled), count($data['apps'])); } - + public function testGetAppsInvalidFilter(): void { $this->expectException(OCSException::class); $this->expectExceptionCode(101); diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php index 29b098429e8..e4f8b3af183 100644 --- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php +++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php @@ -22,30 +22,20 @@ use OCP\IUserManager; use OCP\IUserSession; use OCP\L10N\IFactory; use OCP\UserInterface; +use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; class GroupsControllerTest extends \Test\TestCase { - /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */ - protected $request; - /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $userManager; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; - /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */ - protected $groupManager; - /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */ - protected $userSession; - /** @var IAccountManager|\PHPUnit\Framework\MockObject\MockObject */ - protected $accountManager; - /** @var ISubAdmin|\PHPUnit\Framework\MockObject\MockObject */ - protected $subAdminManager; - /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */ - protected $l10nFactory; - /** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */ - protected $logger; - - /** @var GroupsController|\PHPUnit\Framework\MockObject\MockObject */ - protected $api; + protected IRequest&MockObject $request; + protected IUserManager&MockObject $userManager; + protected IConfig&MockObject $config; + protected Manager&MockObject $groupManager; + protected IUserSession&MockObject $userSession; + protected IAccountManager&MockObject $accountManager; + protected ISubAdmin&MockObject $subAdminManager; + protected IFactory&MockObject $l10nFactory; + protected LoggerInterface&MockObject $logger; + protected GroupsController&MockObject $api; private IRootFolder $rootFolder; @@ -82,16 +72,12 @@ class GroupsControllerTest extends \Test\TestCase { $this->rootFolder, $this->logger ]) - ->setMethods(['fillStorageInfo']) + ->onlyMethods(['fillStorageInfo']) ->getMock(); } - /** - * @param string $gid - * @return IGroup|\PHPUnit\Framework\MockObject\MockObject - */ - private function createGroup($gid) { - $group = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); + private function createGroup(string $gid): IGroup&MockObject { + $group = $this->createMock(\OCP\IGroup::class); $group ->method('getGID') ->willReturn($gid); @@ -116,7 +102,7 @@ class GroupsControllerTest extends \Test\TestCase { /** * @param string $uid - * @return IUser|\PHPUnit\Framework\MockObject\MockObject + * @return IUser&MockObject */ private function createUser($uid) { $user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock(); @@ -165,7 +151,7 @@ class GroupsControllerTest extends \Test\TestCase { }); } - public function dataGetGroups() { + public static function dataGetGroups(): array { return [ [null, 0, 0], ['foo', 0, 0], @@ -177,12 +163,8 @@ class GroupsControllerTest extends \Test\TestCase { /** * @dataProvider dataGetGroups - * - * @param string|null $search - * @param int|null $limit - * @param int|null $offset */ - public function testGetGroups($search, $limit, $offset): void { + public function testGetGroups(?string $search, int $limit, int $offset): void { $groups = [$this->createGroup('group1'), $this->createGroup('group2')]; $search = $search === null ? '' : $search; @@ -509,7 +491,7 @@ class GroupsControllerTest extends \Test\TestCase { ->method('getUserGroups') ->willReturn([$group]); - /** @var \PHPUnit\Framework\MockObject\MockObject */ + /** @var MockObject */ $this->subAdminManager->expects($this->any()) ->method('isSubAdminOfGroup') ->willReturn(false); @@ -554,7 +536,7 @@ class GroupsControllerTest extends \Test\TestCase { ->method('getUserGroups') ->willReturn([$group]); - /** @var \PHPUnit\Framework\MockObject\MockObject */ + /** @var MockObject */ $this->subAdminManager->expects($this->any()) ->method('isSubAdminOfGroup') ->willReturn(false); diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index 7d4f99356b3..80d6d0f6152 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -46,41 +46,24 @@ use RuntimeException; use Test\TestCase; class UsersControllerTest extends TestCase { - /** @var IUserManager|MockObject */ - protected $userManager; - /** @var IConfig|MockObject */ - protected $config; - /** @var Manager|MockObject */ - protected $groupManager; - /** @var IUserSession|MockObject */ - protected $userSession; - /** @var LoggerInterface|MockObject */ - protected $logger; - /** @var UsersController|MockObject */ - protected $api; - /** @var IAccountManager|MockObject */ - protected $accountManager; - /** @var ISubAdmin|MockObject */ - protected $subAdminManager; - /** @var IURLGenerator|MockObject */ - protected $urlGenerator; - /** @var IRequest|MockObject */ - protected $request; - /** @var IFactory|MockObject */ - private $l10nFactory; - /** @var NewUserMailHelper|MockObject */ - private $newUserMailHelper; - /** @var ISecureRandom|MockObject */ - private $secureRandom; - /** @var RemoteWipe|MockObject */ - private $remoteWipe; - /** @var KnownUserService|MockObject */ - private $knownUserService; - /** @var IEventDispatcher|MockObject */ - private $eventDispatcher; + protected IUserManager&MockObject $userManager; + protected IConfig&MockObject $config; + protected Manager&MockObject $groupManager; + protected IUserSession&MockObject $userSession; + protected LoggerInterface&MockObject $logger; + protected UsersController&MockObject $api; + protected IAccountManager&MockObject $accountManager; + protected ISubAdmin&MockObject $subAdminManager; + protected IURLGenerator&MockObject $urlGenerator; + protected IRequest&MockObject $request; + private IFactory&MockObject $l10nFactory; + private NewUserMailHelper&MockObject $newUserMailHelper; + private ISecureRandom&MockObject $secureRandom; + private RemoteWipe&MockObject $remoteWipe; + private KnownUserService&MockObject $knownUserService; + private IEventDispatcher&MockObject $eventDispatcher; private IRootFolder $rootFolder; - /** @var IPhoneNumberUtil */ - private $phoneNumberUtil; + private IPhoneNumberUtil $phoneNumberUtil; protected function setUp(): void { parent::setUp(); @@ -449,10 +432,6 @@ class UsersControllerTest extends TestCase { $this->groupManager ->expects($this->exactly(2)) ->method('groupExists') - ->withConsecutive( - ['ExistingGroup'], - ['NonExistingGroup'] - ) ->willReturnMap([ ['ExistingGroup', true], ['NonExistingGroup', false] @@ -798,18 +777,20 @@ class UsersControllerTest extends TestCase { ->method('get') ->with('ExistingGroup') ->willReturn($group); + + $calls = [ + ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']], + ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']], + ]; $this->logger ->expects($this->exactly(2)) ->method('info') - ->withConsecutive( - ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']], - ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']] - ); + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + }); - $this->assertTrue(key_exists( - 'id', - $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData() - )); + $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData()); } @@ -966,11 +947,10 @@ class UsersControllerTest extends TestCase { $this->groupManager ->expects($this->exactly(2)) ->method('groupExists') - ->withConsecutive( - ['ExistingGroup1'], - ['ExistingGroup2'] - ) - ->willReturn(true); + ->willReturnMap([ + ['ExistingGroup1', true], + ['ExistingGroup2', true] + ]); $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -996,24 +976,23 @@ class UsersControllerTest extends TestCase { $this->groupManager ->expects($this->exactly(4)) ->method('get') - ->withConsecutive( - ['ExistingGroup1'], - ['ExistingGroup2'], - ['ExistingGroup1'], - ['ExistingGroup2'] - ) ->willReturnMap([ ['ExistingGroup1', $existingGroup1], ['ExistingGroup2', $existingGroup2] ]); + + $calls = [ + ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']], + ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']], + ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']], + ]; $this->logger ->expects($this->exactly(3)) ->method('info') - ->withConsecutive( - ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']], - ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']], - ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']] - ); + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + }); $subAdminManager = $this->getMockBuilder('OC\SubAdmin') ->disableOriginalConstructor()->getMock(); $this->groupManager @@ -1023,16 +1002,12 @@ class UsersControllerTest extends TestCase { $subAdminManager ->expects($this->exactly(2)) ->method('isSubAdminOfGroup') - ->withConsecutive( - [$loggedInUser, $existingGroup1], - [$loggedInUser, $existingGroup2] - ) - ->willReturn(true); + ->willReturnMap([ + [$loggedInUser, $existingGroup1, true], + [$loggedInUser, $existingGroup2, true], + ]); - $this->assertTrue(key_exists( - 'id', - $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData() - )); + $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData()); } @@ -1541,7 +1516,7 @@ class UsersControllerTest extends TestCase { $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID'])); } - public function dataSearchByPhoneNumbers(): array { + public static function dataSearchByPhoneNumbers(): array { return [ 'Invalid country' => ['Not a country code', ['12345' => ['NaN']], 400, null, null, []], 'No number to search' => ['DE', ['12345' => ['NaN']], 200, null, null, []], @@ -1556,10 +1531,6 @@ class UsersControllerTest extends TestCase { /** * @dataProvider dataSearchByPhoneNumbers - * @param string $location - * @param array $search - * @param int $status - * @param array $expected */ public function testSearchByPhoneNumbers(string $location, array $search, int $status, ?array $searchUsers, ?array $userMatches, array $expected): void { $knownTo = 'knownTo'; @@ -1870,7 +1841,7 @@ class UsersControllerTest extends TestCase { $this->api->editUser('UserToEdit', 'email', 'demo.org'); } - public function selfEditChangePropertyProvider() { + public static function selfEditChangePropertyProvider(): array { return [ [IAccountManager::PROPERTY_TWITTER, '@oldtwitter', '@newtwitter'], [IAccountManager::PROPERTY_FEDIVERSE, '@oldFediverse@floss.social', '@newFediverse@floss.social'], @@ -2294,7 +2265,7 @@ class UsersControllerTest extends TestCase { $this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData()); } - public function dataEditUserSelfEditChangeLanguageButForced() { + public static function dataEditUserSelfEditChangeLanguageButForced(): array { return [ ['de'], [true], @@ -3942,11 +3913,10 @@ class UsersControllerTest extends TestCase { $api->expects($this->exactly(2)) ->method('getUserData') - ->withConsecutive( - ['uid', false], - ['currentuser', true], - ) - ->willReturn($expected); + ->willReturnMap([ + ['uid', false, $expected], + ['currentuser', true, $expected], + ]); $this->assertSame($expected, $api->getUser('uid')->getData()); @@ -4263,7 +4233,7 @@ class UsersControllerTest extends TestCase { } - public function dataGetEditableFields() { + public static function dataGetEditableFields(): array { return [ [false, true, ISetDisplayNameBackend::class, [ IAccountManager::PROPERTY_EMAIL, @@ -4388,10 +4358,6 @@ class UsersControllerTest extends TestCase { /** * @dataProvider dataGetEditableFields - * - * @param bool $allowedToChangeDisplayName - * @param string $userBackend - * @param array $expected */ public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $allowedToChangeEmail, string $userBackend, array $expected): void { $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => match ($key) { diff --git a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php index d097febb04f..d40aab90d66 100644 --- a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php +++ b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php @@ -24,34 +24,29 @@ class ProvisioningApiMiddlewareTest extends TestCase { $this->reflector = $this->createMock(IControllerMethodReflector::class); } - public function dataAnnotation() { + public static function dataAnnotation(): array { return [ [false, false, false, false, false], - [false, false, true, false, false], - [false, true, true, false, false], - [ true, false, false, false, true], - [ true, false, true, false, false], - [ true, true, false, false, false], - [ true, true, true, false, false], + [false, false, true, false, false], + [false, true, true, false, false], + [true, false, false, false, true], + [true, false, true, false, false], + [true, true, false, false, false], + [true, true, true, false, false], [false, false, false, true, false], - [false, false, true, true, false], - [false, true, true, true, false], - [ true, false, false, true, false], - [ true, false, true, true, false], - [ true, true, false, true, false], - [ true, true, true, true, false], + [false, false, true, true, false], + [false, true, true, true, false], + [true, false, false, true, false], + [true, false, true, true, false], + [true, true, false, true, false], + [true, true, true, true, false], ]; } /** * @dataProvider dataAnnotation - * - * @param bool $subadminRequired - * @param bool $isAdmin - * @param bool $isSubAdmin - * @param bool $shouldThrowException */ - public function testBeforeController($subadminRequired, $isAdmin, $isSubAdmin, $hasSettingAuthorizationAnnotation, $shouldThrowException): void { + public function testBeforeController(bool $subadminRequired, bool $isAdmin, bool $isSubAdmin, bool $hasSettingAuthorizationAnnotation, bool $shouldThrowException): void { $middleware = new ProvisioningApiMiddleware( $this->reflector, $isAdmin, @@ -80,7 +75,7 @@ class ProvisioningApiMiddlewareTest extends TestCase { } } - public function dataAfterException() { + public static function dataAfterException(): array { return [ [new NotSubAdminException(), false], [new \Exception('test', 42), true], @@ -89,11 +84,8 @@ class ProvisioningApiMiddlewareTest extends TestCase { /** * @dataProvider dataAfterException - * - * @param \Exception $e - * @param bool $forwared */ - public function testAfterException(\Exception $exception, $forwared): void { + public function testAfterException(\Exception $exception, bool $forwared): void { $middleware = new ProvisioningApiMiddleware( $this->reflector, false, diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index 66150d7a47b..1b90e97094c 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -122,7 +122,7 @@ OC.L10N.register( "Mobile & desktop" : "Mobil & Desktop", "Email server" : "E-Mail-Server", "Mail Providers" : "E-Mail-Anbieter", - "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", + "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", "Send emails using" : "E-Mails senden mittels", "User's email account" : "E-Mail-Konto des Benutzers", "System email account" : "System-E-Mail-Konto", @@ -371,14 +371,14 @@ OC.L10N.register( "Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen", "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich", "Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden", - "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken", + "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken", "Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)", - "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen", - "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken", - "Groups allowed to share" : "Gruppen, die teilen dürfen", + "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen", + "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben", + "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen", "Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen", "Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.", - "Set default expiration date for internal shares" : "Lege das Standardablaufdatum für interne Freigaben fest", + "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen", "Enforce expiration date" : "Ablaufdatum erzwingen", "Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen", "Expire shares after x days" : "Freigaben laufen nach x Tagen ab", @@ -393,7 +393,7 @@ OC.L10N.register( "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.", "Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken", "Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.", - "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und bei gleicher Gruppenzugehörigkeit)", + "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ", "Disclaimer text" : "Haftungsausschlusstext", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", @@ -549,7 +549,7 @@ OC.L10N.register( "The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.", "The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten hierzu in der {linkstart}PHP-Dokumentation{linkend}.", "Unable to update background job mode" : "Hintergrund-Job-Modus kann nicht aktualisiert werden", - "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.", + "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.", "Last job execution ran {time}. Something seems wrong." : "Der letzte Job lief {time}. Etwas scheint nicht zu stimmen.", "Last job ran {relativeTime}." : "Der letzte Job lief {relativeTime}.", "Background job did not run yet!" : "Hintergrund-Job wurde bislang nicht ausgeführt!", @@ -870,7 +870,7 @@ OC.L10N.register( "Save" : "Speichern", "Test and verify email settings" : "Testen und überprüfen der E-Mail-Einstellungen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Performance deiner Instanz ist es wichtig, dass alles richtig konfiguriert ist. Um dir dabei zu helfen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen kannst du der verlinkten Dokumentation entnehmen.", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung deiner Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um dich dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen findest du in der verlinkten Dokumentation.", "All checks passed." : "Alle Überprüfungen bestanden.", "There are some errors regarding your setup." : "Es gibt einige Fehler in der Systemkonfiguration.", "There are some warnings regarding your setup." : "Es gibt einige Warnungen in der Systemkonfiguration.", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index c25dbf707bd..19b887b7028 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -120,7 +120,7 @@ "Mobile & desktop" : "Mobil & Desktop", "Email server" : "E-Mail-Server", "Mail Providers" : "E-Mail-Anbieter", - "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", + "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", "Send emails using" : "E-Mails senden mittels", "User's email account" : "E-Mail-Konto des Benutzers", "System email account" : "System-E-Mail-Konto", @@ -369,14 +369,14 @@ "Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen", "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich", "Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden", - "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken", + "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken", "Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)", - "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen", - "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken", - "Groups allowed to share" : "Gruppen, die teilen dürfen", + "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen", + "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben", + "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen", "Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen", "Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.", - "Set default expiration date for internal shares" : "Lege das Standardablaufdatum für interne Freigaben fest", + "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen", "Enforce expiration date" : "Ablaufdatum erzwingen", "Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen", "Expire shares after x days" : "Freigaben laufen nach x Tagen ab", @@ -391,7 +391,7 @@ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.", "Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken", "Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.", - "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und bei gleicher Gruppenzugehörigkeit)", + "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ", "Disclaimer text" : "Haftungsausschlusstext", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", @@ -547,7 +547,7 @@ "The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.", "The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten hierzu in der {linkstart}PHP-Dokumentation{linkend}.", "Unable to update background job mode" : "Hintergrund-Job-Modus kann nicht aktualisiert werden", - "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.", + "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.", "Last job execution ran {time}. Something seems wrong." : "Der letzte Job lief {time}. Etwas scheint nicht zu stimmen.", "Last job ran {relativeTime}." : "Der letzte Job lief {relativeTime}.", "Background job did not run yet!" : "Hintergrund-Job wurde bislang nicht ausgeführt!", @@ -868,7 +868,7 @@ "Save" : "Speichern", "Test and verify email settings" : "Testen und überprüfen der E-Mail-Einstellungen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Performance deiner Instanz ist es wichtig, dass alles richtig konfiguriert ist. Um dir dabei zu helfen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen kannst du der verlinkten Dokumentation entnehmen.", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung deiner Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um dich dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen findest du in der verlinkten Dokumentation.", "All checks passed." : "Alle Überprüfungen bestanden.", "There are some errors regarding your setup." : "Es gibt einige Fehler in der Systemkonfiguration.", "There are some warnings regarding your setup." : "Es gibt einige Warnungen in der Systemkonfiguration.", diff --git a/apps/settings/l10n/de_DE.js b/apps/settings/l10n/de_DE.js index 5388ff52529..002bd98e591 100644 --- a/apps/settings/l10n/de_DE.js +++ b/apps/settings/l10n/de_DE.js @@ -122,7 +122,7 @@ OC.L10N.register( "Mobile & desktop" : "Mobil & Desktop", "Email server" : "E-Mail-Server", "Mail Providers" : "E-Mail-Anbieter", - "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", + "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", "Send emails using" : "E-Mails senden mittels", "User's email account" : "E-Mail-Konto des Benutzers", "System email account" : "System-E-Mail-Konto", @@ -371,14 +371,14 @@ OC.L10N.register( "Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen", "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich", "Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden", - "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken", - "Allow sharing for everyone (default)" : "Teilen für jedermann erlauben (Standard)", - "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen", - "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken", - "Groups allowed to share" : "Gruppen, die teilen dürfen", + "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken", + "Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)", + "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen", + "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben", + "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen", "Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen", "Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.", - "Set default expiration date for internal shares" : "Legen Sie das Standardablaufdatum für interne Freigaben fest", + "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen", "Enforce expiration date" : "Ablaufdatum erzwingen", "Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen", "Expire shares after x days" : "Freigaben laufen nach x Tagen ab", @@ -393,7 +393,7 @@ OC.L10N.register( "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.", "Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken", "Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.", - "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der volle Namen oder E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)", + "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Haftungsausschluss auf der öffentlichen Upload-Seite anzeigen (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ", "Disclaimer text" : "Haftungsausschlusstext", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", @@ -549,7 +549,7 @@ OC.L10N.register( "The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.", "The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten finden Sie in der {linkstart}PHP-Dokumentation{linkend}.", "Unable to update background job mode" : "Hintergrund-Aufgaben-Modus kann nicht aktualisiert werden", - "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.", + "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.", "Last job execution ran {time}. Something seems wrong." : "Die letzte Aufgaben-Ausführung lief {time}. Etwas scheint falsch zu sein.", "Last job ran {relativeTime}." : "Die letzte Aufgabe lief {relativeTime}.", "Background job did not run yet!" : "Hintergrund-Aufgabe wurde bislang nicht ausgeführt!", @@ -789,7 +789,7 @@ OC.L10N.register( "Location" : "Ort", "Profile picture" : "Profilbild", "About" : "Über", - "Date of birth" : "Geburtsdatum:", + "Date of birth" : "Geburtsdatum", "Full name" : "Vollständiger Name", "Additional email" : "Zusätzliche E-Mail-Adresse", "Fediverse (e.g. Mastodon)" : "Fediverse (wie z. B. Mastodon)", @@ -870,7 +870,7 @@ OC.L10N.register( "Save" : "Speichern", "Test and verify email settings" : "Testen und Überprüfen der E-Mail-Einstellungen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Geschwindigkeit Ihrer Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Ihnen hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung Ihrer Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um Sie dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.", "All checks passed." : "Alle Überprüfungen bestanden.", "There are some errors regarding your setup." : "Es gibt einige Fehler in Ihrer Systemkonfiguration.", "There are some warnings regarding your setup." : "Es gibt einige Warnungen zu Ihrer Systemkonfiguration.", diff --git a/apps/settings/l10n/de_DE.json b/apps/settings/l10n/de_DE.json index 0f35dc26f55..4d040cf5a19 100644 --- a/apps/settings/l10n/de_DE.json +++ b/apps/settings/l10n/de_DE.json @@ -120,7 +120,7 @@ "Mobile & desktop" : "Mobil & Desktop", "Email server" : "E-Mail-Server", "Mail Providers" : "E-Mail-Anbieter", - "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", + "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.", "Send emails using" : "E-Mails senden mittels", "User's email account" : "E-Mail-Konto des Benutzers", "System email account" : "System-E-Mail-Konto", @@ -369,14 +369,14 @@ "Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen", "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich", "Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden", - "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken", - "Allow sharing for everyone (default)" : "Teilen für jedermann erlauben (Standard)", - "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen", - "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken", - "Groups allowed to share" : "Gruppen, die teilen dürfen", + "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken", + "Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)", + "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen", + "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben", + "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen", "Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen", "Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.", - "Set default expiration date for internal shares" : "Legen Sie das Standardablaufdatum für interne Freigaben fest", + "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen", "Enforce expiration date" : "Ablaufdatum erzwingen", "Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen", "Expire shares after x days" : "Freigaben laufen nach x Tagen ab", @@ -391,7 +391,7 @@ "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.", "Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken", "Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.", - "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der volle Namen oder E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)", + "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Haftungsausschluss auf der öffentlichen Upload-Seite anzeigen (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ", "Disclaimer text" : "Haftungsausschlusstext", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", @@ -547,7 +547,7 @@ "The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.", "The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten finden Sie in der {linkstart}PHP-Dokumentation{linkend}.", "Unable to update background job mode" : "Hintergrund-Aufgaben-Modus kann nicht aktualisiert werden", - "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.", + "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.", "Last job execution ran {time}. Something seems wrong." : "Die letzte Aufgaben-Ausführung lief {time}. Etwas scheint falsch zu sein.", "Last job ran {relativeTime}." : "Die letzte Aufgabe lief {relativeTime}.", "Background job did not run yet!" : "Hintergrund-Aufgabe wurde bislang nicht ausgeführt!", @@ -787,7 +787,7 @@ "Location" : "Ort", "Profile picture" : "Profilbild", "About" : "Über", - "Date of birth" : "Geburtsdatum:", + "Date of birth" : "Geburtsdatum", "Full name" : "Vollständiger Name", "Additional email" : "Zusätzliche E-Mail-Adresse", "Fediverse (e.g. Mastodon)" : "Fediverse (wie z. B. Mastodon)", @@ -868,7 +868,7 @@ "Save" : "Speichern", "Test and verify email settings" : "Testen und Überprüfen der E-Mail-Einstellungen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Geschwindigkeit Ihrer Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Ihnen hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung Ihrer Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um Sie dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.", "All checks passed." : "Alle Überprüfungen bestanden.", "There are some errors regarding your setup." : "Es gibt einige Fehler in Ihrer Systemkonfiguration.", "There are some warnings regarding your setup." : "Es gibt einige Warnungen zu Ihrer Systemkonfiguration.", diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js index b04802d8704..177df787b13 100644 --- a/apps/settings/l10n/et_EE.js +++ b/apps/settings/l10n/et_EE.js @@ -139,12 +139,15 @@ OC.L10N.register( "Email test" : "E-kirjade saatmise test", "Mail delivery is disabled by instance config \"%s\"." : "Selles serveris piirab e-kirjade edasisaatmist seadistus „%s“.", "Email test was successfully sent" : "Test e-kirja saatmine õnnestus", + "Old server-side-encryption" : "Vana serveripoolne krüptimine", "Disabled" : "Keelatud", + "The old server-side-encryption format is enabled. We recommend disabling this." : "Vana serveripoolse krüptimise vorming on kasutusel. Mes soovitame, et lülitad selle välja.", "Logging level" : "Logitase", "The %1$s configuration option must be a valid integer value." : "Seadistusvalik „%1$s“ peab olema korrektne täisarv.", "The logging level is set to debug level. Use debug level only when you have a problem to diagnose, and then reset your log level to a less-verbose level as it outputs a lot of information, and can affect your server performance." : "Logimistase on hetkel seatud veaotsinguks. Kasuta seda vaid siis, kui tõesti tegeled veaotsinguga ning peale seda muuda logimine jälle tavaliseks. Veaotsinguks vajalik logimine on väga väljundirikas ning võib mõjutada serveri jõudlust.", "Logging level configured correctly." : "Logimistase on korrektselt seadistatud", "Supported" : "Toetatud", + "PHP getenv" : "PHP getenv", "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ei tundu olevat süsteemsete keskkonnamuutujate pärimiseks korrektselt seadistatud. Test getenv(\"PATH\") abil tagastab tühja vastuse.", "PHP file size upload limit" : "PHP failide üleslaadimise mahupiir", "The PHP upload_max_filesize is too low. A size of at least %1$s is recommended. Current value: %2$s." : "PHP seadistuse „upload_max_filesize“ väärtus on liiga väike. Meie soovitatud väärtus: %1$s. Praegune väärtus: %2$s.", @@ -152,8 +155,10 @@ OC.L10N.register( "The PHP max_input_time is too low. A time of at least %1$s is recommended. Current value: %2$s." : "PHP seadistuse „max_input_time“ väärtus on liiga väike. Meie soovitatud väärtus: %1$s. Praegune väärtus: %2$s.", "The PHP max_execution_time is too low. A time of at least %1$s is recommended. Current value: %2$s." : "PHP seadistuse „max_execution_time“ väärtus on liiga väike. Meie soovitatud väärtus: %1$s. Praegune väärtus: %2$s.", "PHP memory limit" : "PHP mälukasutuse ülempiir", + "PHP modules" : "PHP lisamoodulid", "for Argon2 for password hashing" : "Argon2-põhise salasõna räsimise jaoks", "required for SFTP storage and recommended for WebAuthn performance" : "nõutav SFTP andmeruumi jaoks ja soovitatav WebAuthn jõudluse jaoks", + "This instance is missing some required PHP modules. It is required to install them: %s." : "Siit serverist on puudu mõned vajalikud PHP moodulid. On nõutav, et paigaldad alljärgnevad lisamoodulid: %s.", "Correctly configured" : "Korrektselt seadistatud", "PHP version" : "PHP versioon", "You are currently running PHP %1$s. PHP %2$s is deprecated since Nextcloud %3$s. Nextcloud %4$s may require at least PHP %5$s. Please upgrade to one of the officially supported PHP versions provided by the PHP Group as soon as possible." : "Sa kasutad hetkel PHP versiooni %1$s. PHP %2$s on aga alates Nexctcloudi versioonist %3$s kasutuselt eemaldatud. Nexctcloud %4$s eeldab, et PHP versioon on vähemalt %5$s. Palun uuenda oma server PHP Groupi poolt väljaantud ametliku PHP versioonini niipea, kui võimalik.", @@ -163,6 +168,8 @@ OC.L10N.register( "Free push service" : "Tasuta tõuketeenus", "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "See on mittetoetatud Nextcloudi variant kogukonnale. Arvestades selle serveri parameetreid, pole jõudlus, töökindlus ja skaleeritavus garanteeritud. Meie tasuta teenuse ülekoormuse vältimiseks on tõuketeavituste arv piiratud. Nextcloud Enterprise versiooni eelistest loe siin: {link}.", "Secure" : "Turvaline", + "Configuration file access rights" : "Ligipääsuõigused seadistuste failile", + "Nextcloud configuration file is writable" : "Nextcloudi seadistusfail on on kirjutatav", "Database version" : "Andmebaasi versioon", "MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni 10.3 ning tema kasutusperiood on lõppenud ja tugi on olemas vaid Ubuntu 20.04 puhul. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%1$s and <= %2$s.", "MariaDB version \"%1$s\" detected. MariaDB >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni „%1$s“. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%2$s and <= %3$s.", @@ -178,11 +185,13 @@ OC.L10N.register( "Enable" : "Lülita sisse", "Machine translation" : "Masintõlge", "Image generation" : "Pildiloome", + "Unable to modify setting" : "Seadistuse muutmine ei õnnestu", "None" : "Pole", "Allow apps to use the Share API" : "Luba rakendustel kasutada Share API-t", "Allow resharing" : "Luba edasijagamine", "Allow sharing with groups" : "Luba gruppidega jagamine", "Restrict users to only share with users in their groups" : "Luba kasutajatel jagada kasutajatega ainult oma grupi piires", + "Allow users to share via link and emails" : "Luba kasutajatel lingiga ja e-postiga jagamist", "Allow public uploads" : "Luba avalikud üleslaadimised", "Always ask for a password" : "Alati küsi parooli", "Enforce password protection" : "Jõusta paroolikaitse", @@ -271,15 +280,20 @@ OC.L10N.register( "Limit app usage to groups" : "Piira rakenduse kasutamist gruppidega", "No results" : "Vasteid ei leitud", "Update to {version}" : "Uuenda versioonile {version}", + "Delete data on remove" : "Eemaldamisel kustuta andmed", "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Sellel rakendusel pole määratud minimaalset Nextcloudi versiooni. See põhjustab tulevikus veateateid.", "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Sellel rakendusel pole määratud maksimaalset Nextcloudi versiooni. See põhjustab tulevikus veateateid.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Seda rakendust ei saa paigaldada, sest järgmised sõltuvusel ei ole täidetud:", + "Latest updated" : "Viimati uuendatud", "Author" : "Autor", "Categories" : "Kategooriad", "Resources" : "Ressursid", "Documentation" : "Dokumentatsioon", "Report a bug" : "Teata veast", + "Request feature" : "Palu arendajatel funktsionaalsuse lisamist", "Ask questions or discuss" : "Küsi nõu või aruta", + "Rate the app" : "Hinda rakendust", + "Rate" : "Hinda", "Changelog" : "Muudatuste logi", "Google Chrome for Android" : "Google Chrome for Android", "{productName} iOS app" : "{productName}i iOS-i rakendus", @@ -318,6 +332,7 @@ OC.L10N.register( "Show QR code for mobile apps" : "Näita QR-koodi nutiseadmete rakenduste jaoks", "Last job execution ran {time}. Something seems wrong." : "Viimane käivitus kestis {time}. See pole päris õige.", "Last job ran {relativeTime}." : "Viimane käivitus kestis {relativeTime}.", + "Unable to update profile default setting" : "Profiili vaikimisi seadistuste uuendamine ei õnnestu", "Profile" : "Profiil", "Failed to save setting" : "Seadistuse salvestamine ei õnnestunud", "Unable to update server side encryption config" : "Serveripoolse krüptimise seadistusi ei õnnestu uuendada", @@ -399,6 +414,8 @@ OC.L10N.register( "Your organisation" : "Sinu organisatsioon", "Your phone number" : "Sinu telefoninumber", "Edit your Profile visibility" : "Muuda oma profiili nähtavust", + "Unable to update profile enabled state" : "Profiili kasutuseloleku uuendamine ei õnnestu", + "Unable to update visibility of {displayId}" : "„{displayId}“ nähtavust polnud võimalik uuendada", "Your role" : "Sinu roll", "Your X (formerly Twitter) handle" : "Sinu X-i (varasemalt Twitteri) kasutajanimi", "Your website" : "Sinu veebileht", @@ -418,7 +435,7 @@ OC.L10N.register( "No accounts" : "Kasutajakontosid pole", "Loading accounts …" : "Kontode laadimine ...", "List of accounts. This list is not fully rendered for performance reasons. The accounts will be rendered as you navigate through the list." : "Kasutajakontode loend. Jõudluse mõttes ei ole kogu loend esimesel hetkel tervikuna nähtav. Uued kasutajakontid lisanduvad sedamööda, kui sa loendis edasi liigud.", - "Manager" : "Haldaaja", + "Manager" : "Haldaja", "Account name will be autogenerated" : "Kasutajakonto nimi luuakse automaatselt", "Account name (required)" : "Kasutajakonto nimi (nõutav)", "Failed to search groups" : "Gruppe ei õnnestunud otsida", @@ -482,20 +499,34 @@ OC.L10N.register( "Set the language" : "Vali keel", "Done" : "Valmis", "Edit" : "Muuda", + "Account management settings" : "Kasutajakontode halduse seadistused", "Visibility" : "Nähtavus", "Show language" : "Näita keelt", + "Show account backend" : "Näita kasutajakonto taustateenust", + "Show storage path" : "Näita andmeruumi asukohta", + "Show first login" : "Näita esimest sisselogimist", "Show last login" : "Näita viimast sisselogimist", "Sorting" : "Järjestus", + "The system config enforces sorting the groups by name. This also disables showing the member count." : "Süsteem seadistus kasutab gruppide järjestamist nime alusel. Muu hulgas see ei võimalda liikmete arvu näitamist.", + "Group list sorting" : "Rühmade loendi järjestus", "Sorting only applies to the currently loaded groups for performance reasons. Groups will be loaded as you navigate or search through the list." : "Jõudluse mõttes kehtib järjestus vaid hetkel laaditud gruppidele. Uued grupid lisanduvad sedamööda, kuidas sa loendis edasi liigud.", + "By member count" : "Liikmete arvu alusel", + "By name" : "Nime alusel", "Send email" : "Saada kiri", + "Send welcome email to new accounts" : "Saada uutele kasutajatele tervituskiri", "Defaults" : "Vaikeväärtused", "Default quota" : "Vaikimisi mahupiir", + "Select default quota" : "Vali vaikimisi andmemahu piir", "Passwordless authentication requires a secure connection." : "Salasõnata autentimine eeldab turvalise võrguühenduse kasutamist.", + "Adding your device …" : "Lisan sinu seadet…", "Unnamed device" : "Nimetu seade", "Passwordless Authentication" : "Salasõnata autentimine", "Set up your account for passwordless authentication following the FIDO2 standard." : "Seadista oma kasutajakonto jaoks salasõnata autentimine, mis põhineb FIDO2 standardil.", + "No devices configured." : "Ühtegi seadet pole seadistatud.", "The following devices are configured for your account:" : "Järgmised seadmed on seadistatud kasutama sinu kontot:", + "Your browser does not support WebAuthn." : "Sinu veebibrauseril puudub WebAuthni tugi.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saate jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", + "You need to enable the File sharing App." : "Sa pead kasutusele võtma Failijagamise rakenduse.", "Version {version}" : "Versioon {version}", "All accounts" : "Kõik kasutajakontod", "Admins" : "Haldurid", @@ -582,6 +613,7 @@ OC.L10N.register( "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "Kasutusel on MariaDB versioon „%s“ . Nextcloud 21 või hilisem seda versiooni ei toeta ning eeldab, et kasutusel on MariaDB versioon 10.2 või hilisem.", "MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "Kasutusel on MySQLi versioon „%s“ . Nextcloud 21 või hilisem seda versiooni ei toeta ning eeldab, et kasutusel on MySQLi versioon 8.0 või MariaDB versioon 10.2 või hilisemad.", "PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "Kasutusel on PostgreSQLi versioon „%s“ . Nextcloud 21 või hilisem seda versiooni ei toeta ning eeldab, et kasutusel on PostgreSQLi versioon 9.6 või hilisem.", + "Your biography" : "Sinu elulugu", "You are using <strong>{usage}</strong>" : "Sa kasutad: <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "Sa kasutad: <strong>{usage}</strong> / <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)", "Set user manager" : "Määra kasutaja haldur", @@ -592,6 +624,7 @@ OC.L10N.register( "Set user groups" : "Määra kasutajagrupid", "Administered groups" : "Hallatud grupid", "Set user as admin for …" : "Määra kasutaja peakasutajaks grupis…", + "Set user quota" : "Määra kasutajate kvoot", "Add new user" : "Lisa uus kasutaja", "_{userCount} user …_::_{userCount} users …_" : ["{userCount} kasutaja…","{userCount} kasutajat…"], "_{userCount} user_::_{userCount} users_" : ["{userCount} kasutaja","{userCount} kasutajat"], diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json index c820494e24b..b74a0da9dcd 100644 --- a/apps/settings/l10n/et_EE.json +++ b/apps/settings/l10n/et_EE.json @@ -137,12 +137,15 @@ "Email test" : "E-kirjade saatmise test", "Mail delivery is disabled by instance config \"%s\"." : "Selles serveris piirab e-kirjade edasisaatmist seadistus „%s“.", "Email test was successfully sent" : "Test e-kirja saatmine õnnestus", + "Old server-side-encryption" : "Vana serveripoolne krüptimine", "Disabled" : "Keelatud", + "The old server-side-encryption format is enabled. We recommend disabling this." : "Vana serveripoolse krüptimise vorming on kasutusel. Mes soovitame, et lülitad selle välja.", "Logging level" : "Logitase", "The %1$s configuration option must be a valid integer value." : "Seadistusvalik „%1$s“ peab olema korrektne täisarv.", "The logging level is set to debug level. Use debug level only when you have a problem to diagnose, and then reset your log level to a less-verbose level as it outputs a lot of information, and can affect your server performance." : "Logimistase on hetkel seatud veaotsinguks. Kasuta seda vaid siis, kui tõesti tegeled veaotsinguga ning peale seda muuda logimine jälle tavaliseks. Veaotsinguks vajalik logimine on väga väljundirikas ning võib mõjutada serveri jõudlust.", "Logging level configured correctly." : "Logimistase on korrektselt seadistatud", "Supported" : "Toetatud", + "PHP getenv" : "PHP getenv", "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ei tundu olevat süsteemsete keskkonnamuutujate pärimiseks korrektselt seadistatud. Test getenv(\"PATH\") abil tagastab tühja vastuse.", "PHP file size upload limit" : "PHP failide üleslaadimise mahupiir", "The PHP upload_max_filesize is too low. A size of at least %1$s is recommended. Current value: %2$s." : "PHP seadistuse „upload_max_filesize“ väärtus on liiga väike. Meie soovitatud väärtus: %1$s. Praegune väärtus: %2$s.", @@ -150,8 +153,10 @@ "The PHP max_input_time is too low. A time of at least %1$s is recommended. Current value: %2$s." : "PHP seadistuse „max_input_time“ väärtus on liiga väike. Meie soovitatud väärtus: %1$s. Praegune väärtus: %2$s.", "The PHP max_execution_time is too low. A time of at least %1$s is recommended. Current value: %2$s." : "PHP seadistuse „max_execution_time“ väärtus on liiga väike. Meie soovitatud väärtus: %1$s. Praegune väärtus: %2$s.", "PHP memory limit" : "PHP mälukasutuse ülempiir", + "PHP modules" : "PHP lisamoodulid", "for Argon2 for password hashing" : "Argon2-põhise salasõna räsimise jaoks", "required for SFTP storage and recommended for WebAuthn performance" : "nõutav SFTP andmeruumi jaoks ja soovitatav WebAuthn jõudluse jaoks", + "This instance is missing some required PHP modules. It is required to install them: %s." : "Siit serverist on puudu mõned vajalikud PHP moodulid. On nõutav, et paigaldad alljärgnevad lisamoodulid: %s.", "Correctly configured" : "Korrektselt seadistatud", "PHP version" : "PHP versioon", "You are currently running PHP %1$s. PHP %2$s is deprecated since Nextcloud %3$s. Nextcloud %4$s may require at least PHP %5$s. Please upgrade to one of the officially supported PHP versions provided by the PHP Group as soon as possible." : "Sa kasutad hetkel PHP versiooni %1$s. PHP %2$s on aga alates Nexctcloudi versioonist %3$s kasutuselt eemaldatud. Nexctcloud %4$s eeldab, et PHP versioon on vähemalt %5$s. Palun uuenda oma server PHP Groupi poolt väljaantud ametliku PHP versioonini niipea, kui võimalik.", @@ -161,6 +166,8 @@ "Free push service" : "Tasuta tõuketeenus", "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "See on mittetoetatud Nextcloudi variant kogukonnale. Arvestades selle serveri parameetreid, pole jõudlus, töökindlus ja skaleeritavus garanteeritud. Meie tasuta teenuse ülekoormuse vältimiseks on tõuketeavituste arv piiratud. Nextcloud Enterprise versiooni eelistest loe siin: {link}.", "Secure" : "Turvaline", + "Configuration file access rights" : "Ligipääsuõigused seadistuste failile", + "Nextcloud configuration file is writable" : "Nextcloudi seadistusfail on on kirjutatav", "Database version" : "Andmebaasi versioon", "MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni 10.3 ning tema kasutusperiood on lõppenud ja tugi on olemas vaid Ubuntu 20.04 puhul. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%1$s and <= %2$s.", "MariaDB version \"%1$s\" detected. MariaDB >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni „%1$s“. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%2$s and <= %3$s.", @@ -176,11 +183,13 @@ "Enable" : "Lülita sisse", "Machine translation" : "Masintõlge", "Image generation" : "Pildiloome", + "Unable to modify setting" : "Seadistuse muutmine ei õnnestu", "None" : "Pole", "Allow apps to use the Share API" : "Luba rakendustel kasutada Share API-t", "Allow resharing" : "Luba edasijagamine", "Allow sharing with groups" : "Luba gruppidega jagamine", "Restrict users to only share with users in their groups" : "Luba kasutajatel jagada kasutajatega ainult oma grupi piires", + "Allow users to share via link and emails" : "Luba kasutajatel lingiga ja e-postiga jagamist", "Allow public uploads" : "Luba avalikud üleslaadimised", "Always ask for a password" : "Alati küsi parooli", "Enforce password protection" : "Jõusta paroolikaitse", @@ -269,15 +278,20 @@ "Limit app usage to groups" : "Piira rakenduse kasutamist gruppidega", "No results" : "Vasteid ei leitud", "Update to {version}" : "Uuenda versioonile {version}", + "Delete data on remove" : "Eemaldamisel kustuta andmed", "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Sellel rakendusel pole määratud minimaalset Nextcloudi versiooni. See põhjustab tulevikus veateateid.", "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Sellel rakendusel pole määratud maksimaalset Nextcloudi versiooni. See põhjustab tulevikus veateateid.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Seda rakendust ei saa paigaldada, sest järgmised sõltuvusel ei ole täidetud:", + "Latest updated" : "Viimati uuendatud", "Author" : "Autor", "Categories" : "Kategooriad", "Resources" : "Ressursid", "Documentation" : "Dokumentatsioon", "Report a bug" : "Teata veast", + "Request feature" : "Palu arendajatel funktsionaalsuse lisamist", "Ask questions or discuss" : "Küsi nõu või aruta", + "Rate the app" : "Hinda rakendust", + "Rate" : "Hinda", "Changelog" : "Muudatuste logi", "Google Chrome for Android" : "Google Chrome for Android", "{productName} iOS app" : "{productName}i iOS-i rakendus", @@ -316,6 +330,7 @@ "Show QR code for mobile apps" : "Näita QR-koodi nutiseadmete rakenduste jaoks", "Last job execution ran {time}. Something seems wrong." : "Viimane käivitus kestis {time}. See pole päris õige.", "Last job ran {relativeTime}." : "Viimane käivitus kestis {relativeTime}.", + "Unable to update profile default setting" : "Profiili vaikimisi seadistuste uuendamine ei õnnestu", "Profile" : "Profiil", "Failed to save setting" : "Seadistuse salvestamine ei õnnestunud", "Unable to update server side encryption config" : "Serveripoolse krüptimise seadistusi ei õnnestu uuendada", @@ -397,6 +412,8 @@ "Your organisation" : "Sinu organisatsioon", "Your phone number" : "Sinu telefoninumber", "Edit your Profile visibility" : "Muuda oma profiili nähtavust", + "Unable to update profile enabled state" : "Profiili kasutuseloleku uuendamine ei õnnestu", + "Unable to update visibility of {displayId}" : "„{displayId}“ nähtavust polnud võimalik uuendada", "Your role" : "Sinu roll", "Your X (formerly Twitter) handle" : "Sinu X-i (varasemalt Twitteri) kasutajanimi", "Your website" : "Sinu veebileht", @@ -416,7 +433,7 @@ "No accounts" : "Kasutajakontosid pole", "Loading accounts …" : "Kontode laadimine ...", "List of accounts. This list is not fully rendered for performance reasons. The accounts will be rendered as you navigate through the list." : "Kasutajakontode loend. Jõudluse mõttes ei ole kogu loend esimesel hetkel tervikuna nähtav. Uued kasutajakontid lisanduvad sedamööda, kui sa loendis edasi liigud.", - "Manager" : "Haldaaja", + "Manager" : "Haldaja", "Account name will be autogenerated" : "Kasutajakonto nimi luuakse automaatselt", "Account name (required)" : "Kasutajakonto nimi (nõutav)", "Failed to search groups" : "Gruppe ei õnnestunud otsida", @@ -480,20 +497,34 @@ "Set the language" : "Vali keel", "Done" : "Valmis", "Edit" : "Muuda", + "Account management settings" : "Kasutajakontode halduse seadistused", "Visibility" : "Nähtavus", "Show language" : "Näita keelt", + "Show account backend" : "Näita kasutajakonto taustateenust", + "Show storage path" : "Näita andmeruumi asukohta", + "Show first login" : "Näita esimest sisselogimist", "Show last login" : "Näita viimast sisselogimist", "Sorting" : "Järjestus", + "The system config enforces sorting the groups by name. This also disables showing the member count." : "Süsteem seadistus kasutab gruppide järjestamist nime alusel. Muu hulgas see ei võimalda liikmete arvu näitamist.", + "Group list sorting" : "Rühmade loendi järjestus", "Sorting only applies to the currently loaded groups for performance reasons. Groups will be loaded as you navigate or search through the list." : "Jõudluse mõttes kehtib järjestus vaid hetkel laaditud gruppidele. Uued grupid lisanduvad sedamööda, kuidas sa loendis edasi liigud.", + "By member count" : "Liikmete arvu alusel", + "By name" : "Nime alusel", "Send email" : "Saada kiri", + "Send welcome email to new accounts" : "Saada uutele kasutajatele tervituskiri", "Defaults" : "Vaikeväärtused", "Default quota" : "Vaikimisi mahupiir", + "Select default quota" : "Vali vaikimisi andmemahu piir", "Passwordless authentication requires a secure connection." : "Salasõnata autentimine eeldab turvalise võrguühenduse kasutamist.", + "Adding your device …" : "Lisan sinu seadet…", "Unnamed device" : "Nimetu seade", "Passwordless Authentication" : "Salasõnata autentimine", "Set up your account for passwordless authentication following the FIDO2 standard." : "Seadista oma kasutajakonto jaoks salasõnata autentimine, mis põhineb FIDO2 standardil.", + "No devices configured." : "Ühtegi seadet pole seadistatud.", "The following devices are configured for your account:" : "Järgmised seadmed on seadistatud kasutama sinu kontot:", + "Your browser does not support WebAuthn." : "Sinu veebibrauseril puudub WebAuthni tugi.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saate jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", + "You need to enable the File sharing App." : "Sa pead kasutusele võtma Failijagamise rakenduse.", "Version {version}" : "Versioon {version}", "All accounts" : "Kõik kasutajakontod", "Admins" : "Haldurid", @@ -580,6 +611,7 @@ "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "Kasutusel on MariaDB versioon „%s“ . Nextcloud 21 või hilisem seda versiooni ei toeta ning eeldab, et kasutusel on MariaDB versioon 10.2 või hilisem.", "MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "Kasutusel on MySQLi versioon „%s“ . Nextcloud 21 või hilisem seda versiooni ei toeta ning eeldab, et kasutusel on MySQLi versioon 8.0 või MariaDB versioon 10.2 või hilisemad.", "PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "Kasutusel on PostgreSQLi versioon „%s“ . Nextcloud 21 või hilisem seda versiooni ei toeta ning eeldab, et kasutusel on PostgreSQLi versioon 9.6 või hilisem.", + "Your biography" : "Sinu elulugu", "You are using <strong>{usage}</strong>" : "Sa kasutad: <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "Sa kasutad: <strong>{usage}</strong> / <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)", "Set user manager" : "Määra kasutaja haldur", @@ -590,6 +622,7 @@ "Set user groups" : "Määra kasutajagrupid", "Administered groups" : "Hallatud grupid", "Set user as admin for …" : "Määra kasutaja peakasutajaks grupis…", + "Set user quota" : "Määra kasutajate kvoot", "Add new user" : "Lisa uus kasutaja", "_{userCount} user …_::_{userCount} users …_" : ["{userCount} kasutaja…","{userCount} kasutajat…"], "_{userCount} user_::_{userCount} users_" : ["{userCount} kasutaja","{userCount} kasutajat"], diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js index 38ccba9634c..56e7508f399 100644 --- a/apps/settings/l10n/fr.js +++ b/apps/settings/l10n/fr.js @@ -223,7 +223,7 @@ OC.L10N.register( "MySQL row format" : "MySQL format row ", "You are not using MySQL" : "Vous n'utilisez pas MySQL", "None of your tables use ROW_FORMAT=Compressed" : "Aucune de vos tables n'utilise ROW_FORMAT=Compressed", - "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de donnéées. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s", + "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de données. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s", "MySQL Unicode support" : "Compatibilité Unicode MySQL", "MySQL is used as database and does support 4-byte characters" : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets", "MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL." : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets. Pour être capable de gérer les caractères sur 4 octets (comme les émojis) sans problème, par exemple, dans les noms de fichiers ou les commentaires, il est recommandé d'activer la compatibilité 4 octets dans MySQL.", diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json index 5b5d67102f7..2b5a1e5bd65 100644 --- a/apps/settings/l10n/fr.json +++ b/apps/settings/l10n/fr.json @@ -221,7 +221,7 @@ "MySQL row format" : "MySQL format row ", "You are not using MySQL" : "Vous n'utilisez pas MySQL", "None of your tables use ROW_FORMAT=Compressed" : "Aucune de vos tables n'utilise ROW_FORMAT=Compressed", - "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de donnéées. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s", + "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de données. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s", "MySQL Unicode support" : "Compatibilité Unicode MySQL", "MySQL is used as database and does support 4-byte characters" : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets", "MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL." : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets. Pour être capable de gérer les caractères sur 4 octets (comme les émojis) sans problème, par exemple, dans les noms de fichiers ou les commentaires, il est recommandé d'activer la compatibilité 4 octets dans MySQL.", diff --git a/apps/settings/l10n/it.js b/apps/settings/l10n/it.js index 5fd40d06340..95f012f9599 100644 --- a/apps/settings/l10n/it.js +++ b/apps/settings/l10n/it.js @@ -256,6 +256,7 @@ OC.L10N.register( "OPcache is not working as it should, opcache_get_status() returns false, please check configuration." : "OPcache non funziona come dovrebbe, opcache_get_status() restituisce false, controlla la configurazione.", "The maximum number of OPcache keys is nearly exceeded. To assure that all scripts can be kept in the cache, it is recommended to apply \"opcache.max_accelerated_files\" to your PHP configuration with a value higher than \"%s\"." : "Il numero massimo di chiavi OPcache è stato quasi superato. Per garantire che tutti gli script possano essere mantenuti nella cache, si consiglia di applicare \"opcache.max_accelerated_files\" alla configurazione PHP con un valore superiore a \"%s\".", "The OPcache buffer is nearly full. To assure that all scripts can be hold in cache, it is recommended to apply \"opcache.memory_consumption\" to your PHP configuration with a value higher than \"%s\"." : "Il buffer OPcache è quasi pieno. Per garantire che tutti gli script possano essere conservati nella cache, si consiglia di applicare \"opcache.memory_consumption\" alla configurazione PHP con un valore superiore a \"%s\".", + "The PHP OPcache module is not properly configured. %s." : "Il modulo PHP OPcache non è correttamente configurato. %s.", "Correctly configured" : "Configurato correttamente", "PHP version" : "Versione PHP", "You are currently running PHP %s." : "Attualmente stai usando PHP %s.", @@ -304,7 +305,16 @@ OC.L10N.register( "Enforce password protection" : "Imponi la protezione con password", "Exclude groups from password requirements" : "Escludi gruppi dai requisiti della password", "Exclude groups from creating link shares" : "Escludi gruppi dalla creazione dei collegamenti di condivisione", + "Allow users to set custom share link tokens" : "Consenti agli utenti di impostare token di collegamento personalizzati", + "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Le condivisioni con token personalizzati continueranno a essere accessibili dopo aver disabilitato questa impostazione", + "Shares with guessable tokens may be accessed easily" : "Le condivisioni con token indovinabili sono facilmente accessibili", + "Limit sharing based on groups" : "Limita la condivisione in base ai gruppi", + "Exclude some groups from sharing" : "Escludi alcuni gruppi dalla condivisione", + "Limit sharing to some groups" : "Limita la condivisione ad alcuni gruppi", + "Groups allowed to share" : "Gruppi autorizzati a condividere", "Groups excluded from sharing" : "Gruppi esclusi dalla condivisione", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "I gruppi non autorizzati potranno comunque ricevere condivisioni, ma non avviarle.", + "Set default expiration date for internal shares" : "Imposta la data di scadenza predefinita per le condivisioni interne", "Enforce expiration date" : "Forza la data di scadenza", "Default expiration time of new shares in days" : "Scadenza predefinita delle nuove condivisioni in giorni", "Expire shares after x days" : "Scadenza delle condivisioni dopo x giorni", @@ -315,6 +325,7 @@ OC.L10N.register( "Set default expiration date for shares via link or mail" : "Imposta la data di scadenza predefinita per le condivisioni tramite link o posta", "Default expiration time of shares in days" : "Scadenza predefinita delle condivisioni in giorni", "Privacy settings for sharing" : "Impostazioni sulla privacy per la condivisione", + "Allow account name autocompletion in share dialog and allow access to the system address book" : "Consenti il completamento automatico del nome dell'account nella finestra di dialogo di condivisione e consenti l'accesso alla rubrica di sistema", "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se completamento di \"stesso gruppo\" e \"integrazione numero di telefono\" sono attivi, una corrispondenza in uno dei due è sufficiente per mostrare l'utente.", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Consenti il completamento automatico quando inserisci il nome completo o l'indirizzo email (ignorando la corrispondenza della rubrica mancante e l'appartenenza allo stesso gruppo)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostra il testo della liberatoria sulla pagina di caricamento del collegamento pubblico (visualizzato solo quando l'elenco dei file è nascosto)", @@ -348,6 +359,7 @@ OC.L10N.register( "No apps found for your version" : "Nessuna applicazione trovata per la tua versione", "_%n app has an update available_::_%n apps have an update available_" : ["%n applicazione ha un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile"], "_Update_::_Update all_" : ["Aggiorna","Aggiorna","Aggiorna tutto"], + "Failed to load groups" : "Impossibile caricare i gruppi", "Failed to create group" : "Creazione gruppo fallita", "Create group" : "Crea gruppo", "Group name" : "Nome del gruppo", @@ -423,6 +435,7 @@ OC.L10N.register( "Password" : "Password", "Show QR code for mobile apps" : "Mostra il codice QR per le applicazioni mobili", "Use system cron service to call the cron.php file every 5 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 5 minuti.", + "The cron.php needs to be executed by the system account \"{user}\"." : "Il cron.php deve essere eseguito dall'account di sistema \"{user}\".", "The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "È necessaria l'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per maggiori dettagli.", "Unable to update background job mode" : "Impossibile aggiornare la modalità delle operazioni in background", "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Per un buon funzionamento del server, è importante configurare le operazioni in background correttamente. \"Cron\" è l'impostazione consigliata. Vedi la documentazione per ulteriori informazioni.", @@ -523,12 +536,14 @@ OC.L10N.register( "Password change is disabled because the master key is disabled" : "La modifica della password è disabilitata poiché la chiave principale è disabilitata", "Loading accounts …" : "Caricamento account in corso...", "Manager" : "Responsabile", + "Failed to search groups" : "Impossibile cercare i gruppi", "New account" : "Nuovo account", "Display name" : "Nome visualizzato", "Either password or email is required" : "La password o l'email è necessaria", "Password (required)" : "Password (richiesta)", "Email (required)" : "Email (richiesta)", "Email" : "Posta elettronica", + "Member of the following groups" : "Membro dei seguenti gruppi", "Quota" : "Quote", "Language" : "Lingua", "Set default language" : "Imposta lingua predefinita", diff --git a/apps/settings/l10n/it.json b/apps/settings/l10n/it.json index 7bc04158924..16d6b817633 100644 --- a/apps/settings/l10n/it.json +++ b/apps/settings/l10n/it.json @@ -254,6 +254,7 @@ "OPcache is not working as it should, opcache_get_status() returns false, please check configuration." : "OPcache non funziona come dovrebbe, opcache_get_status() restituisce false, controlla la configurazione.", "The maximum number of OPcache keys is nearly exceeded. To assure that all scripts can be kept in the cache, it is recommended to apply \"opcache.max_accelerated_files\" to your PHP configuration with a value higher than \"%s\"." : "Il numero massimo di chiavi OPcache è stato quasi superato. Per garantire che tutti gli script possano essere mantenuti nella cache, si consiglia di applicare \"opcache.max_accelerated_files\" alla configurazione PHP con un valore superiore a \"%s\".", "The OPcache buffer is nearly full. To assure that all scripts can be hold in cache, it is recommended to apply \"opcache.memory_consumption\" to your PHP configuration with a value higher than \"%s\"." : "Il buffer OPcache è quasi pieno. Per garantire che tutti gli script possano essere conservati nella cache, si consiglia di applicare \"opcache.memory_consumption\" alla configurazione PHP con un valore superiore a \"%s\".", + "The PHP OPcache module is not properly configured. %s." : "Il modulo PHP OPcache non è correttamente configurato. %s.", "Correctly configured" : "Configurato correttamente", "PHP version" : "Versione PHP", "You are currently running PHP %s." : "Attualmente stai usando PHP %s.", @@ -302,7 +303,16 @@ "Enforce password protection" : "Imponi la protezione con password", "Exclude groups from password requirements" : "Escludi gruppi dai requisiti della password", "Exclude groups from creating link shares" : "Escludi gruppi dalla creazione dei collegamenti di condivisione", + "Allow users to set custom share link tokens" : "Consenti agli utenti di impostare token di collegamento personalizzati", + "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Le condivisioni con token personalizzati continueranno a essere accessibili dopo aver disabilitato questa impostazione", + "Shares with guessable tokens may be accessed easily" : "Le condivisioni con token indovinabili sono facilmente accessibili", + "Limit sharing based on groups" : "Limita la condivisione in base ai gruppi", + "Exclude some groups from sharing" : "Escludi alcuni gruppi dalla condivisione", + "Limit sharing to some groups" : "Limita la condivisione ad alcuni gruppi", + "Groups allowed to share" : "Gruppi autorizzati a condividere", "Groups excluded from sharing" : "Gruppi esclusi dalla condivisione", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "I gruppi non autorizzati potranno comunque ricevere condivisioni, ma non avviarle.", + "Set default expiration date for internal shares" : "Imposta la data di scadenza predefinita per le condivisioni interne", "Enforce expiration date" : "Forza la data di scadenza", "Default expiration time of new shares in days" : "Scadenza predefinita delle nuove condivisioni in giorni", "Expire shares after x days" : "Scadenza delle condivisioni dopo x giorni", @@ -313,6 +323,7 @@ "Set default expiration date for shares via link or mail" : "Imposta la data di scadenza predefinita per le condivisioni tramite link o posta", "Default expiration time of shares in days" : "Scadenza predefinita delle condivisioni in giorni", "Privacy settings for sharing" : "Impostazioni sulla privacy per la condivisione", + "Allow account name autocompletion in share dialog and allow access to the system address book" : "Consenti il completamento automatico del nome dell'account nella finestra di dialogo di condivisione e consenti l'accesso alla rubrica di sistema", "If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se completamento di \"stesso gruppo\" e \"integrazione numero di telefono\" sono attivi, una corrispondenza in uno dei due è sufficiente per mostrare l'utente.", "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Consenti il completamento automatico quando inserisci il nome completo o l'indirizzo email (ignorando la corrispondenza della rubrica mancante e l'appartenenza allo stesso gruppo)", "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostra il testo della liberatoria sulla pagina di caricamento del collegamento pubblico (visualizzato solo quando l'elenco dei file è nascosto)", @@ -346,6 +357,7 @@ "No apps found for your version" : "Nessuna applicazione trovata per la tua versione", "_%n app has an update available_::_%n apps have an update available_" : ["%n applicazione ha un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile"], "_Update_::_Update all_" : ["Aggiorna","Aggiorna","Aggiorna tutto"], + "Failed to load groups" : "Impossibile caricare i gruppi", "Failed to create group" : "Creazione gruppo fallita", "Create group" : "Crea gruppo", "Group name" : "Nome del gruppo", @@ -421,6 +433,7 @@ "Password" : "Password", "Show QR code for mobile apps" : "Mostra il codice QR per le applicazioni mobili", "Use system cron service to call the cron.php file every 5 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 5 minuti.", + "The cron.php needs to be executed by the system account \"{user}\"." : "Il cron.php deve essere eseguito dall'account di sistema \"{user}\".", "The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "È necessaria l'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per maggiori dettagli.", "Unable to update background job mode" : "Impossibile aggiornare la modalità delle operazioni in background", "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Per un buon funzionamento del server, è importante configurare le operazioni in background correttamente. \"Cron\" è l'impostazione consigliata. Vedi la documentazione per ulteriori informazioni.", @@ -521,12 +534,14 @@ "Password change is disabled because the master key is disabled" : "La modifica della password è disabilitata poiché la chiave principale è disabilitata", "Loading accounts …" : "Caricamento account in corso...", "Manager" : "Responsabile", + "Failed to search groups" : "Impossibile cercare i gruppi", "New account" : "Nuovo account", "Display name" : "Nome visualizzato", "Either password or email is required" : "La password o l'email è necessaria", "Password (required)" : "Password (richiesta)", "Email (required)" : "Email (richiesta)", "Email" : "Posta elettronica", + "Member of the following groups" : "Membro dei seguenti gruppi", "Quota" : "Quote", "Language" : "Lingua", "Set default language" : "Imposta lingua predefinita", diff --git a/apps/settings/tests/Activity/SecurityFilterTest.php b/apps/settings/tests/Activity/SecurityFilterTest.php index f3f94df3d21..22ef03816d3 100644 --- a/apps/settings/tests/Activity/SecurityFilterTest.php +++ b/apps/settings/tests/Activity/SecurityFilterTest.php @@ -12,15 +12,9 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class SecurityFilterTest extends TestCase { - - /** @var IURLGenerator|MockObject */ - private $urlGenerator; - - /** @var IL10N|MockObject */ - private $l10n; - - /** @var SecurityFilter */ - private $filter; + private IURLGenerator&MockObject $urlGenerator; + private IL10N&MockObject $l10n; + private SecurityFilter $filter; protected function setUp(): void { parent::setUp(); diff --git a/apps/settings/tests/Activity/SecurityProviderTest.php b/apps/settings/tests/Activity/SecurityProviderTest.php index 35526995a67..1687f116871 100644 --- a/apps/settings/tests/Activity/SecurityProviderTest.php +++ b/apps/settings/tests/Activity/SecurityProviderTest.php @@ -16,27 +16,19 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class SecurityProviderTest extends TestCase { - - /** @var IFactory|MockObject */ - private $l10n; - - /** @var IURLGenerator|MockObject */ - private $urlGenerator; - - /** @var IManager|MockObject */ - private $activityManager; - - /** @var SecurityProvider */ - private $provider; + private IFactory&MockObject $l10nFactory; + private IURLGenerator&MockObject $urlGenerator; + private IManager&MockObject $activityManager; + private SecurityProvider $provider; protected function setUp(): void { parent::setUp(); - $this->l10n = $this->createMock(IFactory::class); + $this->l10nFactory = $this->createMock(IFactory::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->activityManager = $this->createMock(IManager::class); - $this->provider = new SecurityProvider($this->l10n, $this->urlGenerator, $this->activityManager); + $this->provider = new SecurityProvider($this->l10nFactory, $this->urlGenerator, $this->activityManager); } public function testParseUnrelated(): void { @@ -50,7 +42,7 @@ class SecurityProviderTest extends TestCase { $this->provider->parse($lang, $event); } - public function subjectData() { + public static function subjectData(): array { return [ ['twofactor_success'], ['twofactor_failed'], @@ -60,7 +52,7 @@ class SecurityProviderTest extends TestCase { /** * @dataProvider subjectData */ - public function testParse($subject): void { + public function testParse(string $subject): void { $lang = 'ru'; $event = $this->createMock(IEvent::class); $l = $this->createMock(IL10N::class); @@ -68,7 +60,7 @@ class SecurityProviderTest extends TestCase { $event->expects($this->once()) ->method('getType') ->willReturn('security'); - $this->l10n->expects($this->once()) + $this->l10nFactory->expects($this->once()) ->method('get') ->with('settings', $lang) ->willReturn($l); @@ -104,7 +96,7 @@ class SecurityProviderTest extends TestCase { $event->expects($this->once()) ->method('getType') ->willReturn('security'); - $this->l10n->expects($this->once()) + $this->l10nFactory->expects($this->once()) ->method('get') ->with('settings', $lang) ->willReturn($l); diff --git a/apps/settings/tests/Activity/SecuritySettingTest.php b/apps/settings/tests/Activity/SecuritySettingTest.php index 1b2b0e3361c..c109a9f7fdf 100644 --- a/apps/settings/tests/Activity/SecuritySettingTest.php +++ b/apps/settings/tests/Activity/SecuritySettingTest.php @@ -12,8 +12,8 @@ use Test\TestCase; class SecuritySettingTest extends TestCase { private $l10n; - /** @var SecuritySetting */ - private $setting; + /** @var */ + private SecuritySetting $setting; protected function setUp(): void { parent::setUp(); diff --git a/apps/settings/tests/AppInfo/ApplicationTest.php b/apps/settings/tests/AppInfo/ApplicationTest.php index 677efdc64bf..85be8c56178 100644 --- a/apps/settings/tests/AppInfo/ApplicationTest.php +++ b/apps/settings/tests/AppInfo/ApplicationTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -26,11 +28,8 @@ use Test\TestCase; * @group DB */ class ApplicationTest extends TestCase { - /** @var Application */ - protected $app; - - /** @var IAppContainer */ - protected $container; + protected Application $app; + protected IAppContainer $container; protected function setUp(): void { parent::setUp(); @@ -43,7 +42,7 @@ class ApplicationTest extends TestCase { $this->assertEquals('settings', $this->container->getAppName()); } - public function dataContainerQuery() { + public static function dataContainerQuery(): array { return [ [AdminSettingsController::class, Controller::class], [AppSettingsController::class, Controller::class], @@ -59,10 +58,8 @@ class ApplicationTest extends TestCase { /** * @dataProvider dataContainerQuery - * @param string $service - * @param string $expected */ - public function testContainerQuery($service, $expected): void { + public function testContainerQuery(string $service, string $expected): void { $this->assertTrue($this->container->query($service) instanceof $expected); } } diff --git a/apps/settings/tests/Controller/AppSettingsControllerTest.php b/apps/settings/tests/Controller/AppSettingsControllerTest.php index f72bd45a3d2..5194ca2cc33 100644 --- a/apps/settings/tests/Controller/AppSettingsControllerTest.php +++ b/apps/settings/tests/Controller/AppSettingsControllerTest.php @@ -37,39 +37,23 @@ use Test\TestCase; * @group DB */ class AppSettingsControllerTest extends TestCase { - /** @var AppSettingsController */ - private $appSettingsController; - /** @var IRequest|MockObject */ - private $request; - /** @var IL10N|MockObject */ - private $l10n; - /** @var IConfig|MockObject */ - private $config; - /** @var INavigationManager|MockObject */ - private $navigationManager; + private IRequest&MockObject $request; + private IL10N&MockObject $l10n; + private IConfig&MockObject $config; + private INavigationManager&MockObject $navigationManager; private AppManager&MockObject $appManager; - /** @var CategoryFetcher|MockObject */ - private $categoryFetcher; - /** @var AppFetcher|MockObject */ - private $appFetcher; - /** @var IFactory|MockObject */ - private $l10nFactory; - /** @var BundleFetcher|MockObject */ - private $bundleFetcher; - /** @var Installer|MockObject */ - private $installer; - /** @var IURLGenerator|MockObject */ - private $urlGenerator; - /** @var LoggerInterface|MockObject */ - private $logger; - /** @var IInitialState|MockObject */ - private $initialState; - /** @var IAppDataFactory|MockObject */ - private $appDataFactory; - /** @var AppDiscoverFetcher|MockObject */ - private $discoverFetcher; - /** @var IClientService|MockObject */ - private $clientService; + private CategoryFetcher&MockObject $categoryFetcher; + private AppFetcher&MockObject $appFetcher; + private IFactory&MockObject $l10nFactory; + private BundleFetcher&MockObject $bundleFetcher; + private Installer&MockObject $installer; + private IURLGenerator&MockObject $urlGenerator; + private LoggerInterface&MockObject $logger; + private IInitialState&MockObject $initialState; + private IAppDataFactory&MockObject $appDataFactory; + private AppDiscoverFetcher&MockObject $discoverFetcher; + private IClientService&MockObject $clientService; + private AppSettingsController $appSettingsController; protected function setUp(): void { parent::setUp(); diff --git a/apps/settings/tests/Controller/AuthSettingsControllerTest.php b/apps/settings/tests/Controller/AuthSettingsControllerTest.php index 13213992d94..bb6068ffe94 100644 --- a/apps/settings/tests/Controller/AuthSettingsControllerTest.php +++ b/apps/settings/tests/Controller/AuthSettingsControllerTest.php @@ -28,24 +28,15 @@ use Psr\Log\LoggerInterface; use Test\TestCase; class AuthSettingsControllerTest extends TestCase { - - /** @var AuthSettingsController */ - private $controller; - /** @var IRequest|MockObject */ - private $request; - /** @var IProvider|MockObject */ - private $tokenProvider; - /** @var ISession|MockObject */ - private $session; - /** @var IUserSession|MockObject */ - private $userSession; - /** @var ISecureRandom|MockObject */ - private $secureRandom; - /** @var IManager|MockObject */ - private $activityManager; - /** @var RemoteWipe|MockObject */ - private $remoteWipe; - private $uid = 'jane'; + private IRequest&MockObject $request; + private IProvider&MockObject $tokenProvider; + private ISession&MockObject $session; + private IUserSession&MockObject $userSession; + private ISecureRandom&MockObject $secureRandom; + private IManager&MockObject $activityManager; + private RemoteWipe&MockObject $remoteWipe; + private string $uid = 'jane'; + private AuthSettingsController $controller; protected function setUp(): void { parent::setUp(); @@ -57,7 +48,7 @@ class AuthSettingsControllerTest extends TestCase { $this->secureRandom = $this->createMock(ISecureRandom::class); $this->activityManager = $this->createMock(IManager::class); $this->remoteWipe = $this->createMock(RemoteWipe::class); - /** @var LoggerInterface|MockObject $logger */ + /** @var LoggerInterface&MockObject $logger */ $logger = $this->createMock(LoggerInterface::class); $this->controller = new AuthSettingsController( @@ -214,7 +205,7 @@ class AuthSettingsControllerTest extends TestCase { $this->assertSame(\OCP\AppFramework\Http::STATUS_NOT_FOUND, $response->getStatus()); } - public function dataRenameToken(): array { + public static function dataRenameToken(): array { return [ 'App password => Other token name' => ['App password', 'Other token name'], 'Other token name => App password' => ['Other token name', 'App password'], @@ -223,9 +214,6 @@ class AuthSettingsControllerTest extends TestCase { /** * @dataProvider dataRenameToken - * - * @param string $name - * @param string $newName */ public function testUpdateRename(string $name, string $newName): void { $tokenId = 42; @@ -257,7 +245,7 @@ class AuthSettingsControllerTest extends TestCase { $this->assertSame([], $this->controller->update($tokenId, [IToken::SCOPE_FILESYSTEM => true], $newName)); } - public function dataUpdateFilesystemScope(): array { + public static function dataUpdateFilesystemScope(): array { return [ 'Grant filesystem access' => [false, true], 'Revoke filesystem access' => [true, false], @@ -266,9 +254,6 @@ class AuthSettingsControllerTest extends TestCase { /** * @dataProvider dataUpdateFilesystemScope - * - * @param bool $filesystem - * @param bool $newFilesystem */ public function testUpdateFilesystemScope(bool $filesystem, bool $newFilesystem): void { $tokenId = 42; diff --git a/apps/settings/tests/Controller/CheckSetupControllerTest.php b/apps/settings/tests/Controller/CheckSetupControllerTest.php index 27f7aa1b696..a8e89260573 100644 --- a/apps/settings/tests/Controller/CheckSetupControllerTest.php +++ b/apps/settings/tests/Controller/CheckSetupControllerTest.php @@ -29,59 +29,40 @@ use Test\TestCase; * @package Tests\Settings\Controller */ class CheckSetupControllerTest extends TestCase { - /** @var CheckSetupController | \PHPUnit\Framework\MockObject\MockObject */ - private $checkSetupController; - /** @var IRequest | \PHPUnit\Framework\MockObject\MockObject */ - private $request; - /** @var IConfig | \PHPUnit\Framework\MockObject\MockObject */ - private $config; - /** @var IURLGenerator | \PHPUnit\Framework\MockObject\MockObject */ - private $urlGenerator; - /** @var IL10N | \PHPUnit\Framework\MockObject\MockObject */ - private $l10n; - /** @var LoggerInterface */ - private $logger; - /** @var Checker|\PHPUnit\Framework\MockObject\MockObject */ - private $checker; - /** @var ISetupCheckManager|MockObject */ - private $setupCheckManager; + private IRequest&MockObject $request; + private IConfig&MockObject $config; + private IURLGenerator&MockObject $urlGenerator; + private IL10N&MockObject $l10n; + private LoggerInterface&MockObject $logger; + private Checker&MockObject $checker; + private ISetupCheckManager&MockObject $setupCheckManager; + private CheckSetupController $checkSetupController; protected function setUp(): void { parent::setUp(); - $this->request = $this->getMockBuilder(IRequest::class) - ->disableOriginalConstructor()->getMock(); - $this->config = $this->getMockBuilder(IConfig::class) - ->disableOriginalConstructor()->getMock(); - $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class) - ->disableOriginalConstructor()->getMock(); - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->request = $this->createMock(IRequest::class); + $this->config = $this->createMock(IConfig::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { return vsprintf($message, $replace); }); - $this->checker = $this->getMockBuilder('\OC\IntegrityCheck\Checker') - ->disableOriginalConstructor()->getMock(); - $this->logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); + $this->checker = $this->createMock(Checker::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->setupCheckManager = $this->createMock(ISetupCheckManager::class); - $this->checkSetupController = $this->getMockBuilder(CheckSetupController::class) - ->setConstructorArgs([ - 'settings', - $this->request, - $this->config, - $this->urlGenerator, - $this->l10n, - $this->checker, - $this->logger, - $this->setupCheckManager, - ]) - ->setMethods([ - 'getCurlVersion', - 'isPhpOutdated', - 'isPHPMailerUsed', - ])->getMock(); + $this->checkSetupController = new CheckSetupController( + 'settings', + $this->request, + $this->config, + $this->urlGenerator, + $this->l10n, + $this->checker, + $this->logger, + $this->setupCheckManager, + ); } public function testCheck(): void { diff --git a/apps/settings/tests/Controller/DelegationControllerTest.php b/apps/settings/tests/Controller/DelegationControllerTest.php index 5994ddf298d..c4cbe67466b 100644 --- a/apps/settings/tests/Controller/DelegationControllerTest.php +++ b/apps/settings/tests/Controller/DelegationControllerTest.php @@ -10,23 +10,18 @@ use OC\Settings\AuthorizedGroup; use OCA\Settings\Controller\AuthorizedGroupController; use OCA\Settings\Service\AuthorizedGroupService; use OCP\IRequest; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class DelegationControllerTest extends TestCase { - - /** @var AuthorizedGroupService */ - private $service; - - /** @var IRequest */ - private $request; - - /** @var AuthorizedGroupController */ - private $controller; + private AuthorizedGroupService&MockObject $service; + private IRequest&MockObject $request; + private AuthorizedGroupController $controller; protected function setUp(): void { parent::setUp(); - $this->request = $this->getMockBuilder(IRequest::class)->getMock(); - $this->service = $this->getMockBuilder(AuthorizedGroupService::class)->disableOriginalConstructor()->getMock(); + $this->request = $this->createMock(IRequest::class); + $this->service = $this->createMock(AuthorizedGroupService::class); $this->controller = new AuthorizedGroupController( 'settings', $this->request, $this->service ); @@ -41,7 +36,7 @@ class DelegationControllerTest extends TestCase { $this->service->expects($this->once()) ->method('findExistingGroupsForClass') ->with('MySecretSetting') - ->will($this->returnValue($oldGroups)); + ->willReturn($oldGroups); $this->service->expects($this->once()) ->method('delete') @@ -50,7 +45,7 @@ class DelegationControllerTest extends TestCase { $this->service->expects($this->once()) ->method('create') ->with('world', 'MySecretSetting') - ->will($this->returnValue(AuthorizedGroup::fromParams(['groupId' => 'world', 'class' => $setting]))); + ->willReturn(AuthorizedGroup::fromParams(['groupId' => 'world', 'class' => $setting])); $result = $this->controller->saveSettings([['gid' => 'hello'], ['gid' => 'world']], 'MySecretSetting'); diff --git a/apps/settings/tests/Controller/MailSettingsControllerTest.php b/apps/settings/tests/Controller/MailSettingsControllerTest.php index 2a0028738dd..dcb1e3efef4 100644 --- a/apps/settings/tests/Controller/MailSettingsControllerTest.php +++ b/apps/settings/tests/Controller/MailSettingsControllerTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -16,25 +18,18 @@ use OCP\IURLGenerator; use OCP\IUserSession; use OCP\Mail\IEMailTemplate; use OCP\Mail\IMailer; +use PHPUnit\Framework\MockObject\MockObject; /** * @package Tests\Settings\Controller */ class MailSettingsControllerTest extends \Test\TestCase { - - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - private $config; - /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */ - private $userSession; - /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */ - private $mailer; - /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */ - private $l; - /** @var IURLGenerator */ - private $urlGenerator; - - /** @var MailSettingsController */ - private $mailController; + private IConfig&MockObject $config; + private IUserSession&MockObject $userSession; + private IMailer&MockObject $mailer; + private IL10N&MockObject $l; + private IURLGenerator&MockObject $urlGenerator; + private MailSettingsController $mailController; protected function setUp(): void { parent::setUp(); @@ -44,7 +39,7 @@ class MailSettingsControllerTest extends \Test\TestCase { $this->userSession = $this->createMock(IUserSession::class); $this->mailer = $this->createMock(IMailer::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); - /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject $request */ + /** @var IRequest&MockObject $request */ $request = $this->createMock(IRequest::class); $this->mailController = new MailSettingsController( 'settings', @@ -54,37 +49,40 @@ class MailSettingsControllerTest extends \Test\TestCase { $this->userSession, $this->urlGenerator, $this->mailer, - 'no-reply@nextcloud.com' ); } public function testSetMailSettings(): void { + $calls = [ + [[ + 'mail_domain' => 'nextcloud.com', + 'mail_from_address' => 'demo@nextcloud.com', + 'mail_smtpmode' => 'smtp', + 'mail_smtpsecure' => 'ssl', + 'mail_smtphost' => 'mx.nextcloud.org', + 'mail_smtpauth' => 1, + 'mail_smtpport' => '25', + 'mail_sendmailmode' => 'smtp', + ]], + [[ + 'mail_domain' => 'nextcloud.com', + 'mail_from_address' => 'demo@nextcloud.com', + 'mail_smtpmode' => 'smtp', + 'mail_smtpsecure' => 'ssl', + 'mail_smtphost' => 'mx.nextcloud.org', + 'mail_smtpauth' => null, + 'mail_smtpport' => '25', + 'mail_smtpname' => null, + 'mail_smtppassword' => null, + 'mail_sendmailmode' => 'smtp', + ]], + ]; $this->config->expects($this->exactly(2)) ->method('setSystemValues') - ->withConsecutive( - [[ - 'mail_domain' => 'nextcloud.com', - 'mail_from_address' => 'demo@nextcloud.com', - 'mail_smtpmode' => 'smtp', - 'mail_smtpsecure' => 'ssl', - 'mail_smtphost' => 'mx.nextcloud.org', - 'mail_smtpauth' => 1, - 'mail_smtpport' => '25', - 'mail_sendmailmode' => 'smtp', - ]], - [[ - 'mail_domain' => 'nextcloud.com', - 'mail_from_address' => 'demo@nextcloud.com', - 'mail_smtpmode' => 'smtp', - 'mail_smtpsecure' => 'ssl', - 'mail_smtphost' => 'mx.nextcloud.org', - 'mail_smtpauth' => null, - 'mail_smtpport' => '25', - 'mail_smtpname' => null, - 'mail_smtppassword' => null, - 'mail_sendmailmode' => 'smtp', - ]] - ); + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + }); // With authentication $response = $this->mailController->setMailSettings( @@ -93,7 +91,7 @@ class MailSettingsControllerTest extends \Test\TestCase { 'smtp', 'ssl', 'mx.nextcloud.org', - 1, + '1', '25', 'smtp' ); @@ -106,7 +104,7 @@ class MailSettingsControllerTest extends \Test\TestCase { 'smtp', 'ssl', 'mx.nextcloud.org', - 0, + '0', '25', 'smtp' ); diff --git a/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php b/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php index c34b2907dfd..9f8d53d4f9f 100644 --- a/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php +++ b/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -14,15 +16,9 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class TwoFactorSettingsControllerTest extends TestCase { - - /** @var IRequest|MockObject */ - private $request; - - /** @var MandatoryTwoFactor|MockObject */ - private $mandatoryTwoFactor; - - /** @var TwoFactorSettingsController */ - private $controller; + private IRequest&MockObject $request; + private MandatoryTwoFactor&MockObject $mandatoryTwoFactor; + private TwoFactorSettingsController $controller; protected function setUp(): void { parent::setUp(); diff --git a/apps/settings/tests/Controller/UsersControllerTest.php b/apps/settings/tests/Controller/UsersControllerTest.php index 96823e5ceed..d5fe38ad458 100644 --- a/apps/settings/tests/Controller/UsersControllerTest.php +++ b/apps/settings/tests/Controller/UsersControllerTest.php @@ -1,4 +1,6 @@ <?php + +declare(strict_types=1); /** * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2014-2015 ownCloud, Inc. @@ -40,38 +42,22 @@ use PHPUnit\Framework\MockObject\MockObject; * @package Tests\Settings\Controller */ class UsersControllerTest extends \Test\TestCase { - /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */ - private $groupManager; - /** @var UserManager|\PHPUnit\Framework\MockObject\MockObject */ - private $userManager; - /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */ - private $userSession; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - private $config; - /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */ - private $mailer; - /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */ - private $l10nFactory; - /** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */ - private $appManager; - /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */ - private $l; - /** @var AccountManager|\PHPUnit\Framework\MockObject\MockObject */ - private $accountManager; - /** @var IJobList | \PHPUnit\Framework\MockObject\MockObject */ - private $jobList; - /** @var \OC\Security\IdentityProof\Manager|\PHPUnit\Framework\MockObject\MockObject */ - private $securityManager; - /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ - private $encryptionManager; - /** @var KnownUserService|\PHPUnit\Framework\MockObject\MockObject */ - private $knownUserService; - /** @var IEncryptionModule|\PHPUnit\Framework\MockObject\MockObject */ - private $encryptionModule; - /** @var IEventDispatcher|\PHPUnit\Framework\MockObject\MockObject */ - private $dispatcher; - /** @var IInitialState|\PHPUnit\Framework\MockObject\MockObject */ - private $initialState; + private IGroupManager&MockObject $groupManager; + private UserManager&MockObject $userManager; + private IUserSession&MockObject $userSession; + private IConfig&MockObject $config; + private IMailer&MockObject $mailer; + private IFactory&MockObject $l10nFactory; + private IAppManager&MockObject $appManager; + private IL10N&MockObject $l; + private AccountManager&MockObject $accountManager; + private IJobList&MockObject $jobList; + private \OC\Security\IdentityProof\Manager&MockObject $securityManager; + private IManager&MockObject $encryptionManager; + private KnownUserService&MockObject $knownUserService; + private IEncryptionModule&MockObject $encryptionModule; + private IEventDispatcher&MockObject $dispatcher; + private IInitialState&MockObject $initialState; protected function setUp(): void { parent::setUp(); @@ -85,7 +71,7 @@ class UsersControllerTest extends \Test\TestCase { $this->l10nFactory = $this->createMock(IFactory::class); $this->appManager = $this->createMock(IAppManager::class); $this->accountManager = $this->createMock(AccountManager::class); - $this->securityManager = $this->getMockBuilder(\OC\Security\IdentityProof\Manager::class)->disableOriginalConstructor()->getMock(); + $this->securityManager = $this->createMock(\OC\Security\IdentityProof\Manager::class); $this->jobList = $this->createMock(IJobList::class); $this->encryptionManager = $this->createMock(IManager::class); $this->knownUserService = $this->createMock(KnownUserService::class); @@ -106,9 +92,9 @@ class UsersControllerTest extends \Test\TestCase { /** * @param bool $isAdmin - * @return UsersController | \PHPUnit\Framework\MockObject\MockObject + * @return UsersController|MockObject */ - protected function getController($isAdmin = false, $mockedMethods = []) { + protected function getController(bool $isAdmin = false, array $mockedMethods = []) { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn($isAdmin); @@ -155,7 +141,9 @@ class UsersControllerTest extends \Test\TestCase { $this->dispatcher, $this->initialState, ] - )->onlyMethods($mockedMethods)->getMock(); + ) + ->onlyMethods($mockedMethods) + ->getMock(); } } @@ -177,7 +165,7 @@ class UsersControllerTest extends \Test\TestCase { return $property; } - protected function getDefaultAccountMock(bool $useDefaultValues = true): MockObject { + protected function getDefaultAccountMock(): MockObject { $propertyMocks = [ IAccountManager::PROPERTY_DISPLAYNAME => $this->buildPropertyMock( IAccountManager::PROPERTY_DISPLAYNAME, @@ -249,12 +237,8 @@ class UsersControllerTest extends \Test\TestCase { /** * @dataProvider dataTestSetUserSettings - * - * @param string $email - * @param bool $validEmail - * @param $expectedStatus */ - public function testSetUserSettings($email, $validEmail, $expectedStatus): void { + public function testSetUserSettings(string $email, bool $validEmail, int $expectedStatus): void { $controller = $this->getController(false, ['saveUserSettings']); $user = $this->createMock(IUser::class); $user->method('getUID')->willReturn('johndoe'); @@ -305,7 +289,7 @@ class UsersControllerTest extends \Test\TestCase { $this->assertSame($expectedStatus, $result->getStatus()); } - public function dataTestSetUserSettings() { + public static function dataTestSetUserSettings(): array { return [ ['', true, Http::STATUS_OK], ['', false, Http::STATUS_OK], @@ -515,18 +499,15 @@ class UsersControllerTest extends \Test\TestCase { /** * @dataProvider dataTestSetUserSettingsSubset - * - * @param string $property - * @param string $propertyValue */ - public function testSetUserSettingsSubset($property, $propertyValue): void { + public function testSetUserSettingsSubset(string $property, string $propertyValue): void { $controller = $this->getController(false, ['saveUserSettings']); $user = $this->createMock(IUser::class); $user->method('getUID')->willReturn('johndoe'); $this->userSession->method('getUser')->willReturn($user); - /** @var IAccount|MockObject $userAccount */ + /** @var IAccount&MockObject $userAccount */ $userAccount = $this->getDefaultAccountMock(); $this->accountManager->expects($this->once()) @@ -554,9 +535,9 @@ class UsersControllerTest extends \Test\TestCase { $pronouns = ($property === 'pronouns') ? $propertyValue : null; $pronounsScope = ($property === 'pronounsScope') ? $propertyValue : null; - /** @var IAccountProperty[]|MockObject[] $expectedProperties */ + /** @var IAccountProperty[]&MockObject[] $expectedProperties */ $expectedProperties = $userAccount->getProperties(); - $isScope = strrpos($property, 'Scope') === strlen($property) - strlen(5); + $isScope = strrpos($property, 'Scope') === strlen($property) - strlen('5'); switch ($property) { case 'avatarScope': $propertyId = IAccountManager::PROPERTY_AVATAR; @@ -636,7 +617,7 @@ class UsersControllerTest extends \Test\TestCase { ); } - public function dataTestSetUserSettingsSubset() { + public static function dataTestSetUserSettingsSubset(): array { return [ ['avatarScope', IAccountManager::SCOPE_PUBLISHED], ['displayName', 'Display name'], @@ -662,15 +643,8 @@ class UsersControllerTest extends \Test\TestCase { /** * @dataProvider dataTestSaveUserSettings - * - * @param array $data - * @param ?string $oldEmailAddress - * @param ?string $oldDisplayName */ - public function testSaveUserSettings($data, - $oldEmailAddress, - $oldDisplayName, - ): void { + public function testSaveUserSettings(array $data, ?string $oldEmailAddress, ?string $oldDisplayName): void { $controller = $this->getController(); $user = $this->createMock(IUser::class); @@ -722,7 +696,7 @@ class UsersControllerTest extends \Test\TestCase { $this->invokePrivate($controller, 'saveUserSettings', [$account]); } - public function dataTestSaveUserSettings() { + public static function dataTestSaveUserSettings(): array { return [ [ [ @@ -833,7 +807,7 @@ class UsersControllerTest extends \Test\TestCase { } - public function dataTestSaveUserSettingsException() { + public static function dataTestSaveUserSettingsException(): array { return [ [ [ @@ -870,14 +844,9 @@ class UsersControllerTest extends \Test\TestCase { } /** - * @param string $account - * @param string $type - * @param array $dataBefore - * @param array $expectedData - * * @dataProvider dataTestGetVerificationCode */ - public function testGetVerificationCode($account, $type, $dataBefore, $expectedData, $onlyVerificationCode): void { + public function testGetVerificationCode(string $account, string $type, array $dataBefore, array $expectedData, bool $onlyVerificationCode): void { $message = 'Use my Federated Cloud ID to share with me: user@nextcloud.com'; $signature = 'theSignature'; @@ -936,7 +905,7 @@ class UsersControllerTest extends \Test\TestCase { $this->assertSame($code, $data['code']); } - public function dataTestGetVerificationCode() { + public static function dataTestGetVerificationCode(): array { $accountDataBefore = [ IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => IAccountManager::NOT_VERIFIED], IAccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => IAccountManager::NOT_VERIFIED, 'signature' => 'theSignature'], @@ -973,16 +942,13 @@ class UsersControllerTest extends \Test\TestCase { /** * @dataProvider dataTestCanAdminChangeUserPasswords - * - * @param bool $encryptionEnabled - * @param bool $encryptionModuleLoaded - * @param bool $masterKeyEnabled - * @param bool $expected */ - public function testCanAdminChangeUserPasswords($encryptionEnabled, - $encryptionModuleLoaded, - $masterKeyEnabled, - $expected): void { + public function testCanAdminChangeUserPasswords( + bool $encryptionEnabled, + bool $encryptionModuleLoaded, + bool $masterKeyEnabled, + bool $expected, + ): void { $controller = $this->getController(); $this->encryptionManager->expects($this->any()) @@ -1005,7 +971,7 @@ class UsersControllerTest extends \Test\TestCase { $this->assertSame($expected, $result); } - public function dataTestCanAdminChangeUserPasswords() { + public static function dataTestCanAdminChangeUserPasswords(): array { return [ // encryptionEnabled, encryptionModuleLoaded, masterKeyEnabled, expectedResult [true, true, true, true], diff --git a/apps/settings/tests/Mailer/NewUserMailHelperTest.php b/apps/settings/tests/Mailer/NewUserMailHelperTest.php index 1a1fc20354b..26a2bf5a6b6 100644 --- a/apps/settings/tests/Mailer/NewUserMailHelperTest.php +++ b/apps/settings/tests/Mailer/NewUserMailHelperTest.php @@ -20,29 +20,20 @@ use OCP\Mail\IEMailTemplate; use OCP\Mail\IMailer; use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class NewUserMailHelperTest extends TestCase { - /** @var Defaults|\PHPUnit\Framework\MockObject\MockObject */ - private $defaults; - /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */ - private $urlGenerator; - /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */ - private $l10n; - /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */ - private $l10nFactory; - /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */ - private $mailer; - /** @var ISecureRandom|\PHPUnit\Framework\MockObject\MockObject */ - private $secureRandom; - /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */ - private $timeFactory; - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - private $config; - /** @var ICrypto|\PHPUnit\Framework\MockObject\MockObject */ - private $crypto; - /** @var NewUserMailHelper */ - private $newUserMailHelper; + private Defaults&MockObject $defaults; + private IURLGenerator&MockObject $urlGenerator; + private IL10N&MockObject $l10n; + private IFactory&MockObject $l10nFactory; + private IMailer&MockObject $mailer; + private ISecureRandom&MockObject $secureRandom; + private ITimeFactory&MockObject $timeFactory; + private IConfig&MockObject $config; + private ICrypto&MockObject $crypto; + private NewUserMailHelper $newUserMailHelper; protected function setUp(): void { parent::setUp(); @@ -113,7 +104,7 @@ class NewUserMailHelperTest extends TestCase { ->expects($this->once()) ->method('getTime') ->willReturn(12345); - /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */ + /** @var IUser&MockObject $user */ $user = $this->createMock(IUser::class); $user ->expects($this->any()) @@ -371,7 +362,7 @@ EOF; ['myLogo',''], ]); - /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */ + /** @var IUser&MockObject $user */ $user = $this->createMock(IUser::class); $user ->expects($this->any()) @@ -611,7 +602,7 @@ EOF; ['myLogo', ''], ]); - /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */ + /** @var IUser&MockObject $user */ $user = $this->createMock(IUser::class); $user ->expects($this->any()) @@ -830,7 +821,7 @@ EOF; } public function testSendMail(): void { - /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */ + /** @var IUser&MockObject $user */ $user = $this->createMock(IUser::class); $user ->expects($this->once()) @@ -840,7 +831,7 @@ EOF; ->expects($this->once()) ->method('getDisplayName') ->willReturn('John Doe'); - /** @var IEMailTemplate|\PHPUnit\Framework\MockObject\MockObject $emailTemplate */ + /** @var IEMailTemplate&MockObject $emailTemplate */ $emailTemplate = $this->createMock(IEMailTemplate::class); $message = $this->createMock(Message::class); $message diff --git a/apps/settings/tests/Middleware/SubadminMiddlewareTest.php b/apps/settings/tests/Middleware/SubadminMiddlewareTest.php index 2992810af6c..37cfb5ccc59 100644 --- a/apps/settings/tests/Middleware/SubadminMiddlewareTest.php +++ b/apps/settings/tests/Middleware/SubadminMiddlewareTest.php @@ -29,7 +29,6 @@ use PHPUnit\Framework\MockObject\MockObject; */ class SubadminMiddlewareTest extends \Test\TestCase { private SubadminMiddleware $subadminMiddleware; - private IUserSession&MockObject $userSession; private ISubAdmin&MockObject $subAdminManager; private ControllerMethodReflector&MockObject $reflector; @@ -38,8 +37,7 @@ class SubadminMiddlewareTest extends \Test\TestCase { protected function setUp(): void { parent::setUp(); - $this->reflector = $this->getMockBuilder(ControllerMethodReflector::class) - ->disableOriginalConstructor()->getMock(); + $this->reflector = $this->createMock(ControllerMethodReflector::class); $this->userSession = $this->createMock(IUserSession::class); $this->subAdminManager = $this->createMock(ISubAdmin::class); $this->l10n = $this->createMock(IL10N::class); @@ -51,8 +49,7 @@ class SubadminMiddlewareTest extends \Test\TestCase { $this->l10n, ); - $this->controller = $this->getMockBuilder(Controller::class) - ->disableOriginalConstructor()->getMock(); + $this->controller = $this->createMock(Controller::class); $this->userSession ->expects(self::any()) @@ -67,10 +64,10 @@ class SubadminMiddlewareTest extends \Test\TestCase { $this->reflector ->expects($this->exactly(2)) ->method('hasAnnotation') - ->withConsecutive( - ['NoSubAdminRequired'], - ['AuthorizedAdminSetting'], - )->willReturn(false); + ->willReturnMap([ + ['NoSubAdminRequired', false], + ['AuthorizedAdminSetting', false], + ]); $this->subAdminManager ->expects(self::once()) @@ -99,10 +96,10 @@ class SubadminMiddlewareTest extends \Test\TestCase { $this->reflector ->expects($this->exactly(2)) ->method('hasAnnotation') - ->withConsecutive( - ['NoSubAdminRequired'], - ['AuthorizedAdminSetting'], - )->willReturn(false); + ->willReturnMap([ + ['NoSubAdminRequired', false], + ['AuthorizedAdminSetting', false], + ]); $this->subAdminManager ->expects(self::once()) diff --git a/apps/settings/tests/Settings/Admin/MailTest.php b/apps/settings/tests/Settings/Admin/MailTest.php index 560e4f8e997..37d7cb7d56d 100644 --- a/apps/settings/tests/Settings/Admin/MailTest.php +++ b/apps/settings/tests/Settings/Admin/MailTest.php @@ -21,8 +21,8 @@ class MailTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->config = $this->getMockBuilder(IConfig::class)->getMock(); - $this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); + $this->config = $this->createMock(IConfig::class); + $this->l10n = $this->createMock(IL10N::class); $this->admin = new Mail( $this->config, diff --git a/apps/settings/tests/Settings/Admin/SecurityTest.php b/apps/settings/tests/Settings/Admin/SecurityTest.php index 95b5e988397..63b52dd8616 100644 --- a/apps/settings/tests/Settings/Admin/SecurityTest.php +++ b/apps/settings/tests/Settings/Admin/SecurityTest.php @@ -16,21 +16,16 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class SecurityTest extends TestCase { - /** @var Security */ - private $admin; - /** @var Manager */ - private $manager; - /** @var IUserManager */ - private $userManager; - /** @var MandatoryTwoFactor|MockObject */ - private $mandatoryTwoFactor; - /** @var IInitialState|MockObject */ - private $initialState; + private Manager $manager; + private IUserManager $userManager; + private MandatoryTwoFactor&MockObject $mandatoryTwoFactor; + private IInitialState&MockObject $initialState; + private Security $admin; protected function setUp(): void { parent::setUp(); - $this->manager = $this->getMockBuilder(Manager::class)->disableOriginalConstructor()->getMock(); - $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock(); + $this->manager = $this->createMock(Manager::class); + $this->userManager = $this->createMock(IUserManager::class); $this->mandatoryTwoFactor = $this->createMock(MandatoryTwoFactor::class); $this->initialState = $this->createMock(IInitialState::class); @@ -43,10 +38,7 @@ class SecurityTest extends TestCase { ); } - /** - * @return array - */ - public function encryptionSettingsProvider() { + public static function encryptionSettingsProvider(): array { return [ [true], [false], @@ -55,9 +47,8 @@ class SecurityTest extends TestCase { /** * @dataProvider encryptionSettingsProvider - * @param bool $enabled */ - public function testGetFormWithOnlyOneBackend($enabled): void { + public function testGetFormWithOnlyOneBackend(bool $enabled): void { $this->manager ->expects($this->once()) ->method('isEnabled') diff --git a/apps/settings/tests/Settings/Admin/ServerTest.php b/apps/settings/tests/Settings/Admin/ServerTest.php index 35a8a3ce7f7..e2ca4cff3c6 100644 --- a/apps/settings/tests/Settings/Admin/ServerTest.php +++ b/apps/settings/tests/Settings/Admin/ServerTest.php @@ -25,24 +25,15 @@ use Test\TestCase; * @group DB */ class ServerTest extends TestCase { - /** @var IDBConnection */ - private $connection; - /** @var Server&MockObject */ - private $admin; - /** @var IInitialState&MockObject */ - private $initialStateService; - /** @var ProfileManager&MockObject */ - private $profileManager; - /** @var ITimeFactory&MockObject */ - private $timeFactory; - /** @var IConfig&MockObject */ - private $config; - /** @var IAppConfig&MockObject */ - private $appConfig; - /** @var IL10N&MockObject */ - private $l10n; - /** @var IUrlGenerator&MockObject */ - private $urlGenerator; + private IDBConnection $connection; + private Server&MockObject $admin; + private IInitialState&MockObject $initialStateService; + private ProfileManager&MockObject $profileManager; + private ITimeFactory&MockObject $timeFactory; + private IConfig&MockObject $config; + private IAppConfig&MockObject $appConfig; + private IL10N&MockObject $l10n; + private IUrlGenerator&MockObject $urlGenerator; protected function setUp(): void { parent::setUp(); diff --git a/apps/settings/tests/Settings/Admin/SharingTest.php b/apps/settings/tests/Settings/Admin/SharingTest.php index 048634be1e0..bd1a7a1045b 100644 --- a/apps/settings/tests/Settings/Admin/SharingTest.php +++ b/apps/settings/tests/Settings/Admin/SharingTest.php @@ -18,34 +18,22 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class SharingTest extends TestCase { - /** @var Sharing */ - private $admin; - /** @var IConfig&MockObject */ - private $config; - /** @var IL10N&MockObject */ - private $l10n; - /** @var IManager|MockObject */ - private $shareManager; - /** @var IAppManager|MockObject */ - private $appManager; - /** @var IURLGenerator|MockObject */ - private $urlGenerator; - /** @var IInitialState|MockObject */ - private $initialState; + private IConfig&MockObject $config; + private IL10N&MockObject $l10n; + private IManager&MockObject $shareManager; + private IAppManager&MockObject $appManager; + private IURLGenerator&MockObject $urlGenerator; + private IInitialState&MockObject $initialState; + private Sharing $admin; protected function setUp(): void { parent::setUp(); - $this->config = $this->getMockBuilder(IConfig::class)->getMock(); - $this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); - - /** @var IManager|MockObject */ - $this->shareManager = $this->getMockBuilder(IManager::class)->getMock(); - /** @var IAppManager|MockObject */ - $this->appManager = $this->getMockBuilder(IAppManager::class)->getMock(); - /** @var IURLGenerator|MockObject */ - $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock(); - /** @var IInitialState|MockObject */ - $this->initialState = $this->getMockBuilder(IInitialState::class)->getMock(); + $this->config = $this->createMock(IConfig::class); + $this->l10n = $this->createMock(IL10N::class); + $this->shareManager = $this->createMock(IManager::class); + $this->appManager = $this->createMock(IAppManager::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + $this->initialState = $this->createMock(IInitialState::class); $this->admin = new Sharing( $this->config, @@ -104,7 +92,7 @@ class SharingTest extends TestCase { ->willReturnCallback(function (string $key) use (&$initialStateCalls): void { $initialStateCalls[$key] = func_get_args(); }); - + $expectedInitialStateCalls = [ 'sharingAppEnabled' => false, 'sharingDocumentation' => '', diff --git a/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php b/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php index 44641ee98b3..f6f82ab311a 100644 --- a/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php +++ b/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php @@ -20,24 +20,12 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class AuthtokensTest extends TestCase { - - /** @var IAuthTokenProvider|MockObject */ - private $authTokenProvider; - - /** @var ISession|MockObject */ - private $session; - - /** @var IUserSession|MockObject */ - private $userSession; - - /** @var IInitialState|MockObject */ - private $initialState; - - /** @var string */ - private $uid; - - /** @var Authtokens */ - private $section; + private IAuthTokenProvider&MockObject $authTokenProvider; + private ISession&MockObject $session; + private IUserSession&MockObject $userSession; + private IInitialState&MockObject $initialState; + private string $uid; + private Authtokens $section; protected function setUp(): void { parent::setUp(); @@ -80,34 +68,39 @@ class AuthtokensTest extends TestCase { ->method('getToken') ->with('session123') ->willReturn($sessionToken); + + $calls = [ + [ + 'app_tokens', [ + [ + 'id' => 100, + 'name' => null, + 'lastActivity' => 0, + 'type' => 0, + 'canDelete' => false, + 'current' => true, + 'scope' => [IToken::SCOPE_FILESYSTEM => true], + 'canRename' => false, + ], + [ + 'id' => 200, + 'name' => null, + 'lastActivity' => 0, + 'type' => 0, + 'canDelete' => true, + 'scope' => [IToken::SCOPE_FILESYSTEM => true], + 'canRename' => true, + ], + ] + ], + ['can_create_app_token', true], + ]; $this->initialState->expects($this->exactly(2)) ->method('provideInitialState') - ->withConsecutive( - [ - 'app_tokens', [ - [ - 'id' => 100, - 'name' => null, - 'lastActivity' => 0, - 'type' => 0, - 'canDelete' => false, - 'current' => true, - 'scope' => [IToken::SCOPE_FILESYSTEM => true], - 'canRename' => false, - ], - [ - 'id' => 200, - 'name' => null, - 'lastActivity' => 0, - 'type' => 0, - 'canDelete' => true, - 'scope' => [IToken::SCOPE_FILESYSTEM => true], - 'canRename' => true, - ], - ] - ], - ['can_create_app_token', true], - ); + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + }); $form = $this->section->getForm(); diff --git a/apps/settings/tests/Settings/Personal/Security/PasswordTest.php b/apps/settings/tests/Settings/Personal/Security/PasswordTest.php index 62f2c998943..34a4b8e296f 100644 --- a/apps/settings/tests/Settings/Personal/Security/PasswordTest.php +++ b/apps/settings/tests/Settings/Personal/Security/PasswordTest.php @@ -16,15 +16,9 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class PasswordTest extends TestCase { - - /** @var IUserManager|MockObject */ - private $userManager; - - /** @var string */ - private $uid; - - /** @var Password */ - private $section; + private IUserManager&MockObject $userManager; + private string $uid; + private Password $section; protected function setUp(): void { parent::setUp(); diff --git a/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php b/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php index db3141e3a26..423f932dcf5 100644 --- a/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php +++ b/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\AppDirsWithDifferentOwner; use OCP\IL10N; @@ -26,8 +26,7 @@ class AppDirsWithDifferentOwnerTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { diff --git a/apps/settings/tests/SetupChecks/CodeIntegrityTest.php b/apps/settings/tests/SetupChecks/CodeIntegrityTest.php index 52101aed901..4dd54a644f5 100644 --- a/apps/settings/tests/SetupChecks/CodeIntegrityTest.php +++ b/apps/settings/tests/SetupChecks/CodeIntegrityTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OC\IntegrityCheck\Checker; use OCA\Settings\SetupChecks\CodeIntegrity; @@ -17,7 +17,7 @@ use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class CodeIntegrityTest extends TestCase { - + private IL10N&MockObject $l10n; private IURLGenerator&MockObject $urlGenerator; private Checker&MockObject $checker; @@ -25,8 +25,7 @@ class CodeIntegrityTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { diff --git a/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php b/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php index 51dffe58787..a48c6296aff 100644 --- a/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php +++ b/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\DataDirectoryProtected; use OCP\Http\Client\IClientService; @@ -30,9 +30,7 @@ class DataDirectoryProtectedTest extends TestCase { protected function setUp(): void { parent::setUp(); - /** @var IL10N&MockObject */ - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { diff --git a/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php b/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php index b8b25e74c63..b57eb852d80 100644 --- a/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php +++ b/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\ForwardedForHeaders; use OCP\IConfig; @@ -26,8 +26,7 @@ class ForwardedForHeadersTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { @@ -68,7 +67,7 @@ class ForwardedForHeadersTest extends TestCase { ); } - public function dataForwardedForHeadersWorking(): array { + public static function dataForwardedForHeadersWorking(): array { return [ // description => trusted proxies, getHeader('REMOTE_ADDR'), getRemoteAddr, expected result 'no trusted proxies' => [[], '2.2.2.2', '2.2.2.2', SetupResult::SUCCESS], diff --git a/apps/settings/tests/SetupChecks/LoggingLevelTest.php b/apps/settings/tests/SetupChecks/LoggingLevelTest.php index d87f66bb484..9d588a4e486 100644 --- a/apps/settings/tests/SetupChecks/LoggingLevelTest.php +++ b/apps/settings/tests/SetupChecks/LoggingLevelTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\LoggingLevel; use OCP\IConfig; @@ -60,7 +60,7 @@ class LoggingLevelTest extends TestCase { } /** @dataProvider dataRun */ - public function testRun(mixed $value, string $expected): void { + public function testRun(string|int $value, string $expected): void { $this->urlGenerator->method('linkToDocs')->willReturn('admin-logging'); $this->config->expects(self::once()) diff --git a/apps/settings/tests/SetupChecks/OcxProvicersTest.php b/apps/settings/tests/SetupChecks/OcxProvicersTest.php index 4c2b36a8325..8e5a2c1b88b 100644 --- a/apps/settings/tests/SetupChecks/OcxProvicersTest.php +++ b/apps/settings/tests/SetupChecks/OcxProvicersTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\OcxProviders; use OCP\Http\Client\IClientService; @@ -30,9 +30,7 @@ class OcxProvicersTest extends TestCase { protected function setUp(): void { parent::setUp(); - /** @var IL10N|MockObject */ - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { diff --git a/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php b/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php index 4fba60cf72f..3722346219a 100644 --- a/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php +++ b/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\PhpDefaultCharset; use OCP\IL10N; @@ -21,8 +21,7 @@ class PhpDefaultCharsetTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { diff --git a/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php b/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php index 69194df81c5..de509347044 100644 --- a/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php +++ b/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\PhpOutputBuffering; use OCP\IL10N; @@ -21,8 +21,7 @@ class PhpOutputBufferingTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { diff --git a/apps/settings/tests/SetupChecks/SecurityHeadersTest.php b/apps/settings/tests/SetupChecks/SecurityHeadersTest.php index d8bb51d47c6..e7d87775485 100644 --- a/apps/settings/tests/SetupChecks/SecurityHeadersTest.php +++ b/apps/settings/tests/SetupChecks/SecurityHeadersTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\SecurityHeaders; use OCP\Http\Client\IClientService; @@ -20,19 +20,17 @@ use Psr\Log\LoggerInterface; use Test\TestCase; class SecurityHeadersTest extends TestCase { - private IL10N|MockObject $l10n; - private IConfig|MockObject $config; - private IURLGenerator|MockObject $urlGenerator; - private IClientService|MockObject $clientService; - private LoggerInterface|MockObject $logger; - private SecurityHeaders|MockObject $setupcheck; + private IL10N&MockObject $l10n; + private IConfig&MockObject $config; + private IURLGenerator&MockObject $urlGenerator; + private IClientService&MockObject $clientService; + private LoggerInterface&MockObject $logger; + private SecurityHeaders&MockObject $setupcheck; protected function setUp(): void { parent::setUp(); - /** @var IL10N|MockObject */ - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { @@ -92,7 +90,7 @@ class SecurityHeadersTest extends TestCase { $this->assertEquals(SetupResult::WARNING, $result->getSeverity()); } - public function dataSuccess(): array { + public static function dataSuccess(): array { return [ // description => modifiedHeaders 'basic' => [[]], @@ -112,7 +110,7 @@ class SecurityHeadersTest extends TestCase { /** * @dataProvider dataSuccess */ - public function testSuccess($headers): void { + public function testSuccess(array $headers): void { $headers = array_merge( [ 'X-XSS-Protection' => '1; mode=block', @@ -138,7 +136,7 @@ class SecurityHeadersTest extends TestCase { $this->assertEquals(SetupResult::SUCCESS, $result->getSeverity()); } - public function dataFailure(): array { + public static function dataFailure(): array { return [ // description => modifiedHeaders 'x-robots-none' => [['X-Robots-Tag' => 'none'], "- The `X-Robots-Tag` HTTP header is not set to `noindex,nofollow`. This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.\n"], diff --git a/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php b/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php index 4bf529da6bb..6c75df47aa0 100644 --- a/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php +++ b/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php @@ -6,12 +6,12 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\SupportedDatabase; use OCP\IDBConnection; use OCP\IL10N; -use OCP\IUrlGenerator; +use OCP\IURLGenerator; use OCP\Server; use OCP\SetupCheck\SetupResult; use Test\TestCase; @@ -29,8 +29,8 @@ class SupportedDatabaseTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); - $this->urlGenerator = $this->getMockBuilder(IUrlGenerator::class)->getMock(); + $this->l10n = $this->createMock(IL10N::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->connection = Server::get(IDBConnection::class); $this->check = new SupportedDatabase( diff --git a/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php b/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php index 983f2c427ad..14473a540ba 100644 --- a/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php +++ b/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php @@ -6,7 +6,7 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\Settings\Tests; +namespace OCA\Settings\Tests\SetupChecks; use OCA\Settings\SetupChecks\WellKnownUrls; use OCP\Http\Client\IClientService; @@ -20,19 +20,18 @@ use Psr\Log\LoggerInterface; use Test\TestCase; class WellKnownUrlsTest extends TestCase { - private IL10N|MockObject $l10n; - private IConfig|MockObject $config; - private IURLGenerator|MockObject $urlGenerator; - private IClientService|MockObject $clientService; - private LoggerInterface|MockObject $logger; - private WellKnownUrls|MockObject $setupcheck; + private IL10N&MockObject $l10n; + private IConfig&MockObject $config; + private IURLGenerator&MockObject $urlGenerator; + private IClientService&MockObject $clientService; + private LoggerInterface&MockObject $logger; + private WellKnownUrls&MockObject $setupcheck; protected function setUp(): void { parent::setUp(); - /** @var IL10N|MockObject */ - $this->l10n = $this->getMockBuilder(IL10N::class) - ->disableOriginalConstructor()->getMock(); + /** @var IL10N&MockObject */ + $this->l10n = $this->createMock(IL10N::class); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { @@ -116,7 +115,7 @@ class WellKnownUrlsTest extends TestCase { } public function dataTestResponses(): array { - $createResponse = function (int $statuscode, array $header = []): IResponse|MockObject { + $createResponse = function (int $statuscode, array $header = []): IResponse&MockObject { $response = $this->createMock(IResponse::class); $response->expects($this->any()) ->method('getStatusCode') diff --git a/apps/settings/tests/UserMigration/AccountMigratorTest.php b/apps/settings/tests/UserMigration/AccountMigratorTest.php index cd3fd2f7aeb..ded905d226c 100644 --- a/apps/settings/tests/UserMigration/AccountMigratorTest.php +++ b/apps/settings/tests/UserMigration/AccountMigratorTest.php @@ -27,21 +27,12 @@ use Test\TestCase; * @group DB */ class AccountMigratorTest extends TestCase { - private IUserManager $userManager; - private IAvatarManager $avatarManager; - private AccountMigrator $migrator; - - /** @var IImportSource|MockObject */ - private $importSource; - - /** @var IExportDestination|MockObject */ - private $exportDestination; - - /** @var OutputInterface|MockObject */ - private $output; + private IImportSource&MockObject $importSource; + private IExportDestination&MockObject $exportDestination; + private OutputInterface&MockObject $output; private const ASSETS_DIR = __DIR__ . '/assets/'; @@ -72,9 +63,9 @@ class AccountMigratorTest extends TestCase { parent::tearDown(); } - public function dataImportExportAccount(): array { + public static function dataImportExportAccount(): array { return array_map( - function (string $filename) { + static function (string $filename): array { $dataPath = static::ASSETS_DIR . $filename; // For each account json file there is an avatar image and a config json file with the same basename $basename = pathinfo($filename, PATHINFO_FILENAME); @@ -111,17 +102,18 @@ class AccountMigratorTest extends TestCase { ->with($this->migrator->getId()) ->willReturn(1); + $calls = [ + [static::REGEX_ACCOUNT_FILE, json_encode($importData)], + [static::REGEX_CONFIG_FILE, json_encode($importConfig)], + ]; $this->importSource ->expects($this->exactly(2)) ->method('getFileContents') - ->withConsecutive( - [$this->matchesRegularExpression(static::REGEX_ACCOUNT_FILE)], - [$this->matchesRegularExpression(static::REGEX_CONFIG_FILE)], - ) - ->willReturnOnConsecutiveCalls( - json_encode($importData), - json_encode($importConfig), - ); + ->willReturnCallback(function ($path) use (&$calls) { + $expected = array_shift($calls); + $this->assertMatchesRegularExpression($expected[0], $path); + return $expected[1]; + }); $this->importSource ->expects($this->once()) @@ -152,13 +144,18 @@ class AccountMigratorTest extends TestCase { ); } + $calls = [ + [static::REGEX_ACCOUNT_FILE, new JsonMatches(json_encode($importData))], + [static::REGEX_CONFIG_FILE,new JsonMatches(json_encode($importConfig))], + ]; $this->exportDestination ->expects($this->exactly(2)) ->method('addFileContents') - ->withConsecutive( - [$this->matchesRegularExpression(static::REGEX_ACCOUNT_FILE), new JsonMatches(json_encode($exportData))], - [$this->matchesRegularExpression(static::REGEX_CONFIG_FILE), new JsonMatches(json_encode($exportConfig))], - ); + ->willReturnCallback(function ($path) use (&$calls) { + $expected = array_shift($calls); + $this->assertMatchesRegularExpression($expected[0], $path); + return $expected[1]; + }); $this->exportDestination ->expects($this->once()) diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js index bbbe6d400f2..e66e9d82c37 100644 --- a/apps/sharebymail/l10n/de.js +++ b/apps/sharebymail/l10n/de.js @@ -13,7 +13,7 @@ OC.L10N.register( "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an dich gesendet", - "Share by mail" : "Geteilt über eine E-Mail", + "Share by mail" : "Teilen per E-Mail", "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gib in deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.", "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Habe eine ungültige E-Mail-Adresse erhalten.", diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json index a98ad30a28d..ca952b6d67c 100644 --- a/apps/sharebymail/l10n/de.json +++ b/apps/sharebymail/l10n/de.json @@ -11,7 +11,7 @@ "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an dich gesendet", - "Share by mail" : "Geteilt über eine E-Mail", + "Share by mail" : "Teilen per E-Mail", "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gib in deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.", "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Habe eine ungültige E-Mail-Adresse erhalten.", diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js index 338d60108cd..16e66447462 100644 --- a/apps/sharebymail/l10n/de_DE.js +++ b/apps/sharebymail/l10n/de_DE.js @@ -13,7 +13,7 @@ OC.L10N.register( "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt ", - "Share by mail" : "Geteilt über eine E-Mail", + "Share by mail" : "Teilen per E-Mail", "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.", "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Es wurde eine ungültige E-Mail-Adresse angegeben.", diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json index 27ee126b8f0..752bc7681c5 100644 --- a/apps/sharebymail/l10n/de_DE.json +++ b/apps/sharebymail/l10n/de_DE.json @@ -11,7 +11,7 @@ "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt ", - "Share by mail" : "Geteilt über eine E-Mail", + "Share by mail" : "Teilen per E-Mail", "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.", "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Es wurde eine ungültige E-Mail-Adresse angegeben.", diff --git a/apps/weather_status/l10n/ko.js b/apps/weather_status/l10n/ko.js index 6f28af490e8..9af97446624 100644 --- a/apps/weather_status/l10n/ko.js +++ b/apps/weather_status/l10n/ko.js @@ -7,11 +7,44 @@ OC.L10N.register( "Error" : "오류", "Weather status" : "날씨 현황", "Weather status in your dashboard" : "내 대시보드에 있는 날씨 현황", - "Detect location" : "위치 감지", - "Set custom address" : "주소 설정", - "Favorites" : "즐겨찾기", + "Weather status integrated in the Dashboard app.\n The geographic location can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다.", + "{temperature} {unit} clear sky later today" : "{temperature} {unit} 오늘 오후 늦게 맑음", + "{temperature} {unit} clear sky" : "{temperature} {unit} 맑음", + "{temperature} {unit} cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 흐림 ", + "{temperature} {unit} cloudy" : "{temperature} {unit} 흐림 ", + "{temperature} {unit} snow and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 눈", + "{temperature} {unit} snow and thunder" : "{temperature} {unit} 천둥·번개를 동반한 눈", + "{temperature} {unit} snow showers and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 소나기눈", + "{temperature} {unit} snow showers and thunder" : "{temperature} {unit} 천둥·번개를 동반한 소나기눈", + "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개와 극야를 동반한 소나기눈", + "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature} {unit} 천둥·번개와 극야를 동반한 소나기눈", + "{temperature} {unit} snow showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기눈", + "{temperature} {unit} snow showers" : "{temperature} {unit} 소나기눈", + "{temperature} {unit} snow showers and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 극야를 동반한 소나기눈", + "{temperature} {unit} snow showers and polar twilight" : "{temperature} {unit} 극야를 동반한 소나기눈", + "{temperature} {unit} snow later today" : "{temperature} {unit} 오늘 오후 늦게 눈", + "{temperature} {unit} snow" : "{temperature} {unit} 눈", + "{temperature} {unit} fair weather later today" : "{temperature} {unit} 오늘 오후 늦게 맑음", + "{temperature} {unit} fair weather" : "{temperature} {unit} 맑음", + "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 구름 조금", + "{temperature} {unit} partly cloudy" : "{temperature} {unit} 구름 조금", + "{temperature} {unit} foggy later today" : "{temperature} {unit} 오늘 오후 늦게 안개", + "{temperature} {unit} foggy" : "{temperature} {unit} 안개", + "{temperature} {unit} light rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 약한 비", + "{temperature} {unit} light rainfall" : "{temperature} {unit} 약한 비", + "{temperature} {unit} rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 비", + "{temperature} {unit} rainfall" : "{temperature} {unit} 비", + "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 거센 비", + "{temperature} {unit} heavy rainfall" : "{temperature} {unit} 거센 비", + "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기", + "{temperature} {unit} rainfall showers" : "{temperature} {unit} 소나기", + "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 약한 소나기", + "{temperature} {unit} light rainfall showers" : "{temperature} {unit} 약한 소나기", + "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 거센 소나기", + "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} 거센 소나기", "More weather for {adr}" : "{adr} 날씨 더 보기", "Loading weather" : "날씨 불러오는 중", + "Set location for weather" : "날씨 위치 설정", "Remove from favorites" : "즐겨찾기에서 제거", "Add as favorite" : "즐겨찾기로 추가", "You are not logged in." : "당신은 로그인하지 않았습니다.", @@ -22,7 +55,9 @@ OC.L10N.register( "There was an error setting the location." : "주소를 설정하는 동안 오류가 발생했습니다.", "There was an error saving the mode." : "모드 저장에 오류가 있습니다.", "There was an error using personal address." : "개인 주소를 사용하는 동안 오류가 발생했습니다.", - "Set location for weather" : "날씨 위치 설정", - "Weather status integrated in the Dashboard app.\n User's position can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다." + "Unknown weather code" : "알 수 없는 날씨 코드", + "Detect location" : "위치 감지", + "Set custom address" : "주소 설정", + "Favorites" : "즐겨찾기" }, "nplurals=1; plural=0;"); diff --git a/apps/weather_status/l10n/ko.json b/apps/weather_status/l10n/ko.json index b07606e36ae..1a7bbaa4d64 100644 --- a/apps/weather_status/l10n/ko.json +++ b/apps/weather_status/l10n/ko.json @@ -5,11 +5,44 @@ "Error" : "오류", "Weather status" : "날씨 현황", "Weather status in your dashboard" : "내 대시보드에 있는 날씨 현황", - "Detect location" : "위치 감지", - "Set custom address" : "주소 설정", - "Favorites" : "즐겨찾기", + "Weather status integrated in the Dashboard app.\n The geographic location can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다.", + "{temperature} {unit} clear sky later today" : "{temperature} {unit} 오늘 오후 늦게 맑음", + "{temperature} {unit} clear sky" : "{temperature} {unit} 맑음", + "{temperature} {unit} cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 흐림 ", + "{temperature} {unit} cloudy" : "{temperature} {unit} 흐림 ", + "{temperature} {unit} snow and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 눈", + "{temperature} {unit} snow and thunder" : "{temperature} {unit} 천둥·번개를 동반한 눈", + "{temperature} {unit} snow showers and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 소나기눈", + "{temperature} {unit} snow showers and thunder" : "{temperature} {unit} 천둥·번개를 동반한 소나기눈", + "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개와 극야를 동반한 소나기눈", + "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature} {unit} 천둥·번개와 극야를 동반한 소나기눈", + "{temperature} {unit} snow showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기눈", + "{temperature} {unit} snow showers" : "{temperature} {unit} 소나기눈", + "{temperature} {unit} snow showers and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 극야를 동반한 소나기눈", + "{temperature} {unit} snow showers and polar twilight" : "{temperature} {unit} 극야를 동반한 소나기눈", + "{temperature} {unit} snow later today" : "{temperature} {unit} 오늘 오후 늦게 눈", + "{temperature} {unit} snow" : "{temperature} {unit} 눈", + "{temperature} {unit} fair weather later today" : "{temperature} {unit} 오늘 오후 늦게 맑음", + "{temperature} {unit} fair weather" : "{temperature} {unit} 맑음", + "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 구름 조금", + "{temperature} {unit} partly cloudy" : "{temperature} {unit} 구름 조금", + "{temperature} {unit} foggy later today" : "{temperature} {unit} 오늘 오후 늦게 안개", + "{temperature} {unit} foggy" : "{temperature} {unit} 안개", + "{temperature} {unit} light rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 약한 비", + "{temperature} {unit} light rainfall" : "{temperature} {unit} 약한 비", + "{temperature} {unit} rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 비", + "{temperature} {unit} rainfall" : "{temperature} {unit} 비", + "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 거센 비", + "{temperature} {unit} heavy rainfall" : "{temperature} {unit} 거센 비", + "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기", + "{temperature} {unit} rainfall showers" : "{temperature} {unit} 소나기", + "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 약한 소나기", + "{temperature} {unit} light rainfall showers" : "{temperature} {unit} 약한 소나기", + "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 거센 소나기", + "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} 거센 소나기", "More weather for {adr}" : "{adr} 날씨 더 보기", "Loading weather" : "날씨 불러오는 중", + "Set location for weather" : "날씨 위치 설정", "Remove from favorites" : "즐겨찾기에서 제거", "Add as favorite" : "즐겨찾기로 추가", "You are not logged in." : "당신은 로그인하지 않았습니다.", @@ -20,7 +53,9 @@ "There was an error setting the location." : "주소를 설정하는 동안 오류가 발생했습니다.", "There was an error saving the mode." : "모드 저장에 오류가 있습니다.", "There was an error using personal address." : "개인 주소를 사용하는 동안 오류가 발생했습니다.", - "Set location for weather" : "날씨 위치 설정", - "Weather status integrated in the Dashboard app.\n User's position can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다." + "Unknown weather code" : "알 수 없는 날씨 코드", + "Detect location" : "위치 감지", + "Set custom address" : "주소 설정", + "Favorites" : "즐겨찾기" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index c0f3d35e57f..f1107ecb4a1 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -675,6 +675,12 @@ </ParamNameMismatch> </file> <file src="apps/dav/lib/Connector/Sabre/File.php"> + <DeprecatedClass> + <code><![CDATA[Files::streamCopy($data, $target, true)]]></code> + </DeprecatedClass> + <DeprecatedMethod> + <code><![CDATA[Files::streamCopy($data, $target, true)]]></code> + </DeprecatedMethod> <LessSpecificReturnStatement> <code><![CDATA[$this->node]]></code> </LessSpecificReturnStatement> @@ -1964,14 +1970,13 @@ </file> <file src="apps/files_versions/lib/Storage.php"> <DeprecatedClass> + <code><![CDATA[Files::streamCopy($source, $target, true)]]></code> <code><![CDATA[\OC_Util::setupFS($uid)]]></code> </DeprecatedClass> <DeprecatedMethod> + <code><![CDATA[Files::streamCopy($source, $target, true)]]></code> <code><![CDATA[dispatch]]></code> </DeprecatedMethod> - <RedundantCondition> - <code><![CDATA[$storage1->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage')]]></code> - </RedundantCondition> </file> <file src="apps/oauth2/lib/Controller/OauthApiController.php"> <NoInterfaceProperties> diff --git a/core/l10n/de.js b/core/l10n/de.js index 85f1050e0e1..2c69f7aaa38 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -80,8 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (inkompatibel)", "The following apps have been disabled: %s" : "Folgende Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "Windows Command Script" : "Windows-Befehlsskript", + "Electronic book document" : "E-Book-Dokument", + "TrueType Font Collection" : "TrueType-Schriftartensammlung", + "Web Open Font Format" : "Web Open Font Format", + "GPX geographic data" : "GPX-Geodaten", + "Gzip archive" : "Gzip-Archiv", + "Adobe Illustrator document" : "Adobe Illustrator-Dokument", + "Java source code" : "Java Quellcode", + "JavaScript source code" : "JavaScript Quellcode", + "JSON document" : "JSON-Dokument", + "Microsoft Access database" : "Microsoft Access-Datenbank", + "Microsoft OneNote document" : "Microsoft OneNote-Dokument", + "Microsoft Word document" : "Microsoft Word-Dokument", "Unknown" : "Unbekannt", + "PDF document" : "PDF-Dokument", + "PostScript document" : "PostScript-Dokument", + "RSS summary" : "RSS-Zusammenfassung", + "Android package" : "Android-Paket", + "KML geographic data" : "KML-Geodaten", + "KML geographic compressed data" : "Komprimierte KML-Geodaten", + "Lotus Word Pro document" : "Lotus Word Pro-Dokument", + "Excel spreadsheet" : "Excel-Tabelle", + "Excel add-in" : "Excel-Add-in", + "Excel 2007 binary spreadsheet" : "Excel 2007 Binärtabelle", + "Excel spreadsheet template" : "Excel-Tabellenvorlage", + "Outlook Message" : "Outlook-Nachricht", + "PowerPoint presentation" : "PowerPoint-Präsentation", + "PowerPoint add-in" : "PowerPoint Add-in", + "PowerPoint presentation template" : "PowerPoint-Präsentationsvorlage", + "Word document" : "Word Dokument", + "ODF formula" : "ODF-Formel", + "ODG drawing" : "ODG-Zeichnung", + "ODG drawing (Flat XML)" : "ODG-Zeichnung (Flat XML)", + "ODG template" : "ODG-Vorlage", + "ODP presentation" : "ODP-Präsentation", + "ODP presentation (Flat XML)" : "ODP-Präsentation (Flat XML)", + "ODP template" : "ODP-Vorlage", + "ODS spreadsheet" : "ODS-Tabelle", + "ODS spreadsheet (Flat XML)" : "ODS-Tabelle (Flat XML)", + "ODS template" : "ODS-Vorlage", + "ODT document" : "ODT-Dokument", + "ODT document (Flat XML)" : "ODT-Dokument (Flat XML)", + "ODT template" : "ODT-Vorlage", + "PowerPoint 2007 presentation" : "PowerPoint 2007-Präsentation", + "PowerPoint 2007 show" : "PowerPoint 2007-Schau", + "PowerPoint 2007 presentation template" : "PowerPoint 2007-Präsentationsvorlage", + "Excel 2007 spreadsheet" : "Excel 2007-Tabelle", + "Excel 2007 spreadsheet template" : "Excel 2007-Tabellenvorlage", + "Word 2007 document" : "Word 2007-Dokument", + "Word 2007 document template" : "Word 2007-Dokumentenvorlage", + "Microsoft Visio document" : "Microsoft Visio-Dokument", + "WordPerfect document" : "WordPerfect-Dokument", + "7-zip archive" : "7-zip-Archiv", + "Blender scene" : "Blender-Szene", + "Bzip2 archive" : "Bzip2-Archiv", + "Debian package" : "Debian-Paket", + "FictionBook document" : "FictionBook-Dokument", + "Unknown font" : "Unbekannte Schriftart", + "Krita document" : "Krita-Dokument", + "Mobipocket e-book" : "Mobipocket E-Book", + "Windows Installer package" : "Windows-Installationspaket", + "Perl script" : "Perl-Skript", + "PHP script" : "PHP-Skript", + "Tar archive" : "Tar-Archiv", + "XML document" : "XML-Dokument", + "YAML document" : "YAML-Dokument", + "Zip archive" : "Zip-Archiv", + "Zstandard archive" : "Zstandard-Archiv", + "AAC audio" : "AAC-Audio", + "FLAC audio" : "FLAC-Audio", + "MPEG-4 audio" : "MPEG-4-Audio", + "MP3 audio" : "MP3-Audio", + "Ogg audio" : "Ogg-Audio", + "RIFF/WAVe standard Audio" : "RIFF/WAVe Standard-Audio", + "WebM audio" : "WebM-Audio", + "MP3 ShoutCast playlist" : "MP3 ShoutCast-Wiedergabeliste", + "Windows BMP image" : "Windows BMP-Bild", + "Better Portable Graphics image" : "Better Portable Graphics-Bild", + "EMF image" : "EMF-Bild", + "GIF image" : "GIF-Bild", + "HEIC image" : "HEIC-Bild", + "HEIF image" : "HEIF-Bild", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2-Bild", + "JPEG image" : "JPEG-Bild", "PNG image" : "PNG-Bild", + "SVG image" : "SVG-Bild", + "Truevision Targa image" : "Truevision Targa-Bild", + "TIFF image" : "TIFF-Bild", + "WebP image" : "WebP-Bild", + "Digital raw image" : "Digitales raw-Bild", + "Windows Icon" : "Windows-Symbol", + "Email message" : "E-Mail-Nachricht", + "VCS/ICS calendar" : "VCS/ICS-Kalender", + "CSS stylesheet" : "CSS-Stylesheet", + "CSV document" : "CSV-Dokument", + "HTML document" : "HTML-Dokument", + "Markdown document" : "Markdown-Dokument", + "Org-mode file" : "Org-mode-Datei", + "Plain text document" : "Rohtext-Dokument", + "Rich Text document" : "Rich Text-Dokument", + "Electronic business card" : "Elektronische Visitenkarte", + "C++ source code" : "C++-Quellcode", + "LDIF address book" : "LDIF-Adressbuch", + "NFO document" : "NFO-Dokument", + "PHP source" : "PHP-Quelltext", + "Python script" : "Python-Skript", + "ReStructuredText document" : "ReStructuredText-Dokument", + "3GPP multimedia file" : "3GPP Multimedia-Datei", + "MPEG video" : "MPEG-Video", + "DV video" : "DV-Video", + "MPEG-2 transport stream" : "MPEG-2-Transportstrom", + "MPEG-4 video" : "MPEG-4-Video", + "Ogg video" : "Ogg-Video", + "QuickTime video" : "QuickTime-Video", + "WebM video" : "WebM-Video", + "Flash video" : "Flash-Video", + "Matroska video" : "Matroska-Video", + "Windows Media video" : "Windows Media-Video", + "AVI video" : "AVI-Video", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "For more details see the {linkstart}documentation ↗{linkend}." : "Weitere Informationen findest du in der {linkstart}Dokumentation ↗{linkend}.", "unknown text" : "Unbekannter Text", diff --git a/core/l10n/de.json b/core/l10n/de.json index 12a5eef1ddf..04a0f5ace51 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -78,8 +78,125 @@ "%s (incompatible)" : "%s (inkompatibel)", "The following apps have been disabled: %s" : "Folgende Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "Windows Command Script" : "Windows-Befehlsskript", + "Electronic book document" : "E-Book-Dokument", + "TrueType Font Collection" : "TrueType-Schriftartensammlung", + "Web Open Font Format" : "Web Open Font Format", + "GPX geographic data" : "GPX-Geodaten", + "Gzip archive" : "Gzip-Archiv", + "Adobe Illustrator document" : "Adobe Illustrator-Dokument", + "Java source code" : "Java Quellcode", + "JavaScript source code" : "JavaScript Quellcode", + "JSON document" : "JSON-Dokument", + "Microsoft Access database" : "Microsoft Access-Datenbank", + "Microsoft OneNote document" : "Microsoft OneNote-Dokument", + "Microsoft Word document" : "Microsoft Word-Dokument", "Unknown" : "Unbekannt", + "PDF document" : "PDF-Dokument", + "PostScript document" : "PostScript-Dokument", + "RSS summary" : "RSS-Zusammenfassung", + "Android package" : "Android-Paket", + "KML geographic data" : "KML-Geodaten", + "KML geographic compressed data" : "Komprimierte KML-Geodaten", + "Lotus Word Pro document" : "Lotus Word Pro-Dokument", + "Excel spreadsheet" : "Excel-Tabelle", + "Excel add-in" : "Excel-Add-in", + "Excel 2007 binary spreadsheet" : "Excel 2007 Binärtabelle", + "Excel spreadsheet template" : "Excel-Tabellenvorlage", + "Outlook Message" : "Outlook-Nachricht", + "PowerPoint presentation" : "PowerPoint-Präsentation", + "PowerPoint add-in" : "PowerPoint Add-in", + "PowerPoint presentation template" : "PowerPoint-Präsentationsvorlage", + "Word document" : "Word Dokument", + "ODF formula" : "ODF-Formel", + "ODG drawing" : "ODG-Zeichnung", + "ODG drawing (Flat XML)" : "ODG-Zeichnung (Flat XML)", + "ODG template" : "ODG-Vorlage", + "ODP presentation" : "ODP-Präsentation", + "ODP presentation (Flat XML)" : "ODP-Präsentation (Flat XML)", + "ODP template" : "ODP-Vorlage", + "ODS spreadsheet" : "ODS-Tabelle", + "ODS spreadsheet (Flat XML)" : "ODS-Tabelle (Flat XML)", + "ODS template" : "ODS-Vorlage", + "ODT document" : "ODT-Dokument", + "ODT document (Flat XML)" : "ODT-Dokument (Flat XML)", + "ODT template" : "ODT-Vorlage", + "PowerPoint 2007 presentation" : "PowerPoint 2007-Präsentation", + "PowerPoint 2007 show" : "PowerPoint 2007-Schau", + "PowerPoint 2007 presentation template" : "PowerPoint 2007-Präsentationsvorlage", + "Excel 2007 spreadsheet" : "Excel 2007-Tabelle", + "Excel 2007 spreadsheet template" : "Excel 2007-Tabellenvorlage", + "Word 2007 document" : "Word 2007-Dokument", + "Word 2007 document template" : "Word 2007-Dokumentenvorlage", + "Microsoft Visio document" : "Microsoft Visio-Dokument", + "WordPerfect document" : "WordPerfect-Dokument", + "7-zip archive" : "7-zip-Archiv", + "Blender scene" : "Blender-Szene", + "Bzip2 archive" : "Bzip2-Archiv", + "Debian package" : "Debian-Paket", + "FictionBook document" : "FictionBook-Dokument", + "Unknown font" : "Unbekannte Schriftart", + "Krita document" : "Krita-Dokument", + "Mobipocket e-book" : "Mobipocket E-Book", + "Windows Installer package" : "Windows-Installationspaket", + "Perl script" : "Perl-Skript", + "PHP script" : "PHP-Skript", + "Tar archive" : "Tar-Archiv", + "XML document" : "XML-Dokument", + "YAML document" : "YAML-Dokument", + "Zip archive" : "Zip-Archiv", + "Zstandard archive" : "Zstandard-Archiv", + "AAC audio" : "AAC-Audio", + "FLAC audio" : "FLAC-Audio", + "MPEG-4 audio" : "MPEG-4-Audio", + "MP3 audio" : "MP3-Audio", + "Ogg audio" : "Ogg-Audio", + "RIFF/WAVe standard Audio" : "RIFF/WAVe Standard-Audio", + "WebM audio" : "WebM-Audio", + "MP3 ShoutCast playlist" : "MP3 ShoutCast-Wiedergabeliste", + "Windows BMP image" : "Windows BMP-Bild", + "Better Portable Graphics image" : "Better Portable Graphics-Bild", + "EMF image" : "EMF-Bild", + "GIF image" : "GIF-Bild", + "HEIC image" : "HEIC-Bild", + "HEIF image" : "HEIF-Bild", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2-Bild", + "JPEG image" : "JPEG-Bild", "PNG image" : "PNG-Bild", + "SVG image" : "SVG-Bild", + "Truevision Targa image" : "Truevision Targa-Bild", + "TIFF image" : "TIFF-Bild", + "WebP image" : "WebP-Bild", + "Digital raw image" : "Digitales raw-Bild", + "Windows Icon" : "Windows-Symbol", + "Email message" : "E-Mail-Nachricht", + "VCS/ICS calendar" : "VCS/ICS-Kalender", + "CSS stylesheet" : "CSS-Stylesheet", + "CSV document" : "CSV-Dokument", + "HTML document" : "HTML-Dokument", + "Markdown document" : "Markdown-Dokument", + "Org-mode file" : "Org-mode-Datei", + "Plain text document" : "Rohtext-Dokument", + "Rich Text document" : "Rich Text-Dokument", + "Electronic business card" : "Elektronische Visitenkarte", + "C++ source code" : "C++-Quellcode", + "LDIF address book" : "LDIF-Adressbuch", + "NFO document" : "NFO-Dokument", + "PHP source" : "PHP-Quelltext", + "Python script" : "Python-Skript", + "ReStructuredText document" : "ReStructuredText-Dokument", + "3GPP multimedia file" : "3GPP Multimedia-Datei", + "MPEG video" : "MPEG-Video", + "DV video" : "DV-Video", + "MPEG-2 transport stream" : "MPEG-2-Transportstrom", + "MPEG-4 video" : "MPEG-4-Video", + "Ogg video" : "Ogg-Video", + "QuickTime video" : "QuickTime-Video", + "WebM video" : "WebM-Video", + "Flash video" : "Flash-Video", + "Matroska video" : "Matroska-Video", + "Windows Media video" : "Windows Media-Video", + "AVI video" : "AVI-Video", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "For more details see the {linkstart}documentation ↗{linkend}." : "Weitere Informationen findest du in der {linkstart}Dokumentation ↗{linkend}.", "unknown text" : "Unbekannter Text", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 69fe565f20e..4bf8bdf1649 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -80,8 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (inkompatibel)", "The following apps have been disabled: %s" : "Folgende Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "Windows Command Script" : "Windows-Befehlsskript", + "Electronic book document" : "E-Book-Dokument", + "TrueType Font Collection" : "TrueType-Schriftartensammlung", + "Web Open Font Format" : "Web Open Font Format", + "GPX geographic data" : "GPX-Geodaten", + "Gzip archive" : "Gzip-Archiv", + "Adobe Illustrator document" : "Adobe Illustrator-Dokument", + "Java source code" : "Java Quellcode", + "JavaScript source code" : "JavaScript Quellcode", + "JSON document" : "JSON-Dokument", + "Microsoft Access database" : "Microsoft Access-Datenbank", + "Microsoft OneNote document" : "Microsoft OneNote-Dokument", + "Microsoft Word document" : "Microsoft Word-Dokument", "Unknown" : "Unbekannt", + "PDF document" : "PDF-Dokument", + "PostScript document" : "PostScript-Dokument", + "RSS summary" : "RSS-Zusammenfassung", + "Android package" : "Android-Paket", + "KML geographic data" : "KML-Geodaten", + "KML geographic compressed data" : "Komprimierte KML-Geodaten", + "Lotus Word Pro document" : "Lotus Word Pro-Dokument", + "Excel spreadsheet" : "Excel-Tabelle", + "Excel add-in" : "Excel-Add-in", + "Excel 2007 binary spreadsheet" : "Excel 2007 Binärtabelle", + "Excel spreadsheet template" : "Excel-Tabellenvorlage", + "Outlook Message" : "Outlook-Nachricht", + "PowerPoint presentation" : "PowerPoint-Präsentation", + "PowerPoint add-in" : "PowerPoint Add-in", + "PowerPoint presentation template" : "PowerPoint-Präsentationsvorlage", + "Word document" : "Word Dokument", + "ODF formula" : "ODF-Formel", + "ODG drawing" : "ODG-Zeichnung", + "ODG drawing (Flat XML)" : "ODG-Zeichnung (Flat XML)", + "ODG template" : "ODG-Vorlage", + "ODP presentation" : "ODP-Präsentation", + "ODP presentation (Flat XML)" : "ODP-Präsentation (Flat XML)", + "ODP template" : "ODP-Vorlage", + "ODS spreadsheet" : "ODS-Tabelle", + "ODS spreadsheet (Flat XML)" : "ODS-Tabelle (Flat XML)", + "ODS template" : "ODS-Vorlage", + "ODT document" : "ODT-Dokument", + "ODT document (Flat XML)" : "ODT-Dokument (Flat XML)", + "ODT template" : "ODT-Vorlage", + "PowerPoint 2007 presentation" : "PowerPoint 2007-Präsentation", + "PowerPoint 2007 show" : "PowerPoint 2007-Schau", + "PowerPoint 2007 presentation template" : "PowerPoint 2007-Präsentationsvorlage", + "Excel 2007 spreadsheet" : "Excel 2007-Tabelle", + "Excel 2007 spreadsheet template" : "Excel 2007-Tabellenvorlage", + "Word 2007 document" : "Word 2007-Dokument", + "Word 2007 document template" : "Word 2007-Dokumentenvorlage", + "Microsoft Visio document" : "Microsoft Visio-Dokument", + "WordPerfect document" : "WordPerfect-Dokument", + "7-zip archive" : "7-zip-Archiv", + "Blender scene" : "Blender-Szene", + "Bzip2 archive" : "Bzip2-Archiv", + "Debian package" : "Debian-Paket", + "FictionBook document" : "FictionBook-Dokument", + "Unknown font" : "Unbekannte Schriftart", + "Krita document" : "Krita-Dokument", + "Mobipocket e-book" : "Mobipocket E-Book", + "Windows Installer package" : "Windows-Installationspaket", + "Perl script" : "Perl-Skript", + "PHP script" : "PHP-Skript", + "Tar archive" : "Tar-Archiv", + "XML document" : "XML-Dokument", + "YAML document" : "YAML-Dokument", + "Zip archive" : "Zip-Archiv", + "Zstandard archive" : "Zstandard-Archiv", + "AAC audio" : "AAC-Audio", + "FLAC audio" : "FLAC-Audio", + "MPEG-4 audio" : "MPEG-4-Audio", + "MP3 audio" : "MP3-Audio", + "Ogg audio" : "Ogg-Audio", + "RIFF/WAVe standard Audio" : "RIFF/WAVe Standard-Audio", + "WebM audio" : "WebM-Audio", + "MP3 ShoutCast playlist" : "MP3 ShoutCast-Wiedergabeliste", + "Windows BMP image" : "Windows BMP-Bild", + "Better Portable Graphics image" : "Better Portable Graphics-Bild", + "EMF image" : "EMF-Bild", + "GIF image" : "GIF-Bild", + "HEIC image" : "HEIC-Bild", + "HEIF image" : "HEIF-Bild", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2-Bild", + "JPEG image" : "JPEG-Bild", "PNG image" : "PNG-Bild", + "SVG image" : "SVG-Bild", + "Truevision Targa image" : "Truevision Targa-Bild", + "TIFF image" : "TIFF-Bild", + "WebP image" : "WebP-Bild", + "Digital raw image" : "Digitales raw-Bild", + "Windows Icon" : "Windows-Symbol", + "Email message" : "E-Mail-Nachricht", + "VCS/ICS calendar" : "VCS/ICS-Kalender", + "CSS stylesheet" : "CSS-Stylesheet", + "CSV document" : "CSV-Dokument", + "HTML document" : "HTML-Dokument", + "Markdown document" : "Markdown-Dokument", + "Org-mode file" : "Org-mode-Datei", + "Plain text document" : "Rohtext-Dokument", + "Rich Text document" : "Rich Text-Dokument", + "Electronic business card" : "Elektronische Visitenkarte", + "C++ source code" : "C++-Quellcode", + "LDIF address book" : "LDIF-Adressbuch", + "NFO document" : "NFO-Dokument", + "PHP source" : "PHP-Quelle", + "Python script" : "Python-Skript", + "ReStructuredText document" : "ReStructuredText-Dokument", + "3GPP multimedia file" : "3GPP Multimedia-Datei", + "MPEG video" : "MPEG-Video", + "DV video" : "DV-Video", + "MPEG-2 transport stream" : "MPEG-2-Transportstrom", + "MPEG-4 video" : "MPEG-4-Video", + "Ogg video" : "Ogg-Video", + "QuickTime video" : "QuickTime-Video", + "WebM video" : "WebM-Video", + "Flash video" : "Flash-Video", + "Matroska video" : "Matroska-Video", + "Windows Media video" : "Windows Media-Video", + "AVI video" : "AVI-Video", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "For more details see the {linkstart}documentation ↗{linkend}." : "Weitere Informationen finden Sie in der {linkstart}Dokumentation ↗{linkend}.", "unknown text" : "Unbekannter Text", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index 703f5cfdf60..755fb0536c7 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -78,8 +78,125 @@ "%s (incompatible)" : "%s (inkompatibel)", "The following apps have been disabled: %s" : "Folgende Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "Windows Command Script" : "Windows-Befehlsskript", + "Electronic book document" : "E-Book-Dokument", + "TrueType Font Collection" : "TrueType-Schriftartensammlung", + "Web Open Font Format" : "Web Open Font Format", + "GPX geographic data" : "GPX-Geodaten", + "Gzip archive" : "Gzip-Archiv", + "Adobe Illustrator document" : "Adobe Illustrator-Dokument", + "Java source code" : "Java Quellcode", + "JavaScript source code" : "JavaScript Quellcode", + "JSON document" : "JSON-Dokument", + "Microsoft Access database" : "Microsoft Access-Datenbank", + "Microsoft OneNote document" : "Microsoft OneNote-Dokument", + "Microsoft Word document" : "Microsoft Word-Dokument", "Unknown" : "Unbekannt", + "PDF document" : "PDF-Dokument", + "PostScript document" : "PostScript-Dokument", + "RSS summary" : "RSS-Zusammenfassung", + "Android package" : "Android-Paket", + "KML geographic data" : "KML-Geodaten", + "KML geographic compressed data" : "Komprimierte KML-Geodaten", + "Lotus Word Pro document" : "Lotus Word Pro-Dokument", + "Excel spreadsheet" : "Excel-Tabelle", + "Excel add-in" : "Excel-Add-in", + "Excel 2007 binary spreadsheet" : "Excel 2007 Binärtabelle", + "Excel spreadsheet template" : "Excel-Tabellenvorlage", + "Outlook Message" : "Outlook-Nachricht", + "PowerPoint presentation" : "PowerPoint-Präsentation", + "PowerPoint add-in" : "PowerPoint Add-in", + "PowerPoint presentation template" : "PowerPoint-Präsentationsvorlage", + "Word document" : "Word Dokument", + "ODF formula" : "ODF-Formel", + "ODG drawing" : "ODG-Zeichnung", + "ODG drawing (Flat XML)" : "ODG-Zeichnung (Flat XML)", + "ODG template" : "ODG-Vorlage", + "ODP presentation" : "ODP-Präsentation", + "ODP presentation (Flat XML)" : "ODP-Präsentation (Flat XML)", + "ODP template" : "ODP-Vorlage", + "ODS spreadsheet" : "ODS-Tabelle", + "ODS spreadsheet (Flat XML)" : "ODS-Tabelle (Flat XML)", + "ODS template" : "ODS-Vorlage", + "ODT document" : "ODT-Dokument", + "ODT document (Flat XML)" : "ODT-Dokument (Flat XML)", + "ODT template" : "ODT-Vorlage", + "PowerPoint 2007 presentation" : "PowerPoint 2007-Präsentation", + "PowerPoint 2007 show" : "PowerPoint 2007-Schau", + "PowerPoint 2007 presentation template" : "PowerPoint 2007-Präsentationsvorlage", + "Excel 2007 spreadsheet" : "Excel 2007-Tabelle", + "Excel 2007 spreadsheet template" : "Excel 2007-Tabellenvorlage", + "Word 2007 document" : "Word 2007-Dokument", + "Word 2007 document template" : "Word 2007-Dokumentenvorlage", + "Microsoft Visio document" : "Microsoft Visio-Dokument", + "WordPerfect document" : "WordPerfect-Dokument", + "7-zip archive" : "7-zip-Archiv", + "Blender scene" : "Blender-Szene", + "Bzip2 archive" : "Bzip2-Archiv", + "Debian package" : "Debian-Paket", + "FictionBook document" : "FictionBook-Dokument", + "Unknown font" : "Unbekannte Schriftart", + "Krita document" : "Krita-Dokument", + "Mobipocket e-book" : "Mobipocket E-Book", + "Windows Installer package" : "Windows-Installationspaket", + "Perl script" : "Perl-Skript", + "PHP script" : "PHP-Skript", + "Tar archive" : "Tar-Archiv", + "XML document" : "XML-Dokument", + "YAML document" : "YAML-Dokument", + "Zip archive" : "Zip-Archiv", + "Zstandard archive" : "Zstandard-Archiv", + "AAC audio" : "AAC-Audio", + "FLAC audio" : "FLAC-Audio", + "MPEG-4 audio" : "MPEG-4-Audio", + "MP3 audio" : "MP3-Audio", + "Ogg audio" : "Ogg-Audio", + "RIFF/WAVe standard Audio" : "RIFF/WAVe Standard-Audio", + "WebM audio" : "WebM-Audio", + "MP3 ShoutCast playlist" : "MP3 ShoutCast-Wiedergabeliste", + "Windows BMP image" : "Windows BMP-Bild", + "Better Portable Graphics image" : "Better Portable Graphics-Bild", + "EMF image" : "EMF-Bild", + "GIF image" : "GIF-Bild", + "HEIC image" : "HEIC-Bild", + "HEIF image" : "HEIF-Bild", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2-Bild", + "JPEG image" : "JPEG-Bild", "PNG image" : "PNG-Bild", + "SVG image" : "SVG-Bild", + "Truevision Targa image" : "Truevision Targa-Bild", + "TIFF image" : "TIFF-Bild", + "WebP image" : "WebP-Bild", + "Digital raw image" : "Digitales raw-Bild", + "Windows Icon" : "Windows-Symbol", + "Email message" : "E-Mail-Nachricht", + "VCS/ICS calendar" : "VCS/ICS-Kalender", + "CSS stylesheet" : "CSS-Stylesheet", + "CSV document" : "CSV-Dokument", + "HTML document" : "HTML-Dokument", + "Markdown document" : "Markdown-Dokument", + "Org-mode file" : "Org-mode-Datei", + "Plain text document" : "Rohtext-Dokument", + "Rich Text document" : "Rich Text-Dokument", + "Electronic business card" : "Elektronische Visitenkarte", + "C++ source code" : "C++-Quellcode", + "LDIF address book" : "LDIF-Adressbuch", + "NFO document" : "NFO-Dokument", + "PHP source" : "PHP-Quelle", + "Python script" : "Python-Skript", + "ReStructuredText document" : "ReStructuredText-Dokument", + "3GPP multimedia file" : "3GPP Multimedia-Datei", + "MPEG video" : "MPEG-Video", + "DV video" : "DV-Video", + "MPEG-2 transport stream" : "MPEG-2-Transportstrom", + "MPEG-4 video" : "MPEG-4-Video", + "Ogg video" : "Ogg-Video", + "QuickTime video" : "QuickTime-Video", + "WebM video" : "WebM-Video", + "Flash video" : "Flash-Video", + "Matroska video" : "Matroska-Video", + "Windows Media video" : "Windows Media-Video", + "AVI video" : "AVI-Video", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "For more details see the {linkstart}documentation ↗{linkend}." : "Weitere Informationen finden Sie in der {linkstart}Dokumentation ↗{linkend}.", "unknown text" : "Unbekannter Text", diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index 5474c48a5eb..df16407fd9e 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -80,8 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatible)", "The following apps have been disabled: %s" : "The following apps have been disabled: %s", "Already up to date" : "Already up to date", + "Windows Command Script" : "Windows Command Script", + "Electronic book document" : "Electronic book document", + "TrueType Font Collection" : "TrueType Font Collection", + "Web Open Font Format" : "Web Open Font Format", + "GPX geographic data" : "GPX geographic data", + "Gzip archive" : "Gzip archive", + "Adobe Illustrator document" : "Adobe Illustrator document", + "Java source code" : "Java source code", + "JavaScript source code" : "JavaScript source code", + "JSON document" : "JSON document", + "Microsoft Access database" : "Microsoft Access database", + "Microsoft OneNote document" : "Microsoft OneNote document", + "Microsoft Word document" : "Microsoft Word document", "Unknown" : "Unknown", + "PDF document" : "PDF document", + "PostScript document" : "PostScript document", + "RSS summary" : "RSS summary", + "Android package" : "Android package", + "KML geographic data" : "KML geographic data", + "KML geographic compressed data" : "KML geographic compressed data", + "Lotus Word Pro document" : "Lotus Word Pro document", + "Excel spreadsheet" : "Excel spreadsheet", + "Excel add-in" : "Excel add-in", + "Excel 2007 binary spreadsheet" : "Excel 2007 binary spreadsheet", + "Excel spreadsheet template" : "Excel spreadsheet template", + "Outlook Message" : "Outlook Message", + "PowerPoint presentation" : "PowerPoint presentation", + "PowerPoint add-in" : "PowerPoint add-in", + "PowerPoint presentation template" : "PowerPoint presentation template", + "Word document" : "Word document", + "ODF formula" : "ODF formula", + "ODG drawing" : "ODG drawing", + "ODG drawing (Flat XML)" : "ODG drawing (Flat XML)", + "ODG template" : "ODG template", + "ODP presentation" : "ODP presentation", + "ODP presentation (Flat XML)" : "ODP presentation (Flat XML)", + "ODP template" : "ODP template", + "ODS spreadsheet" : "ODS spreadsheet", + "ODS spreadsheet (Flat XML)" : "ODS spreadsheet (Flat XML)", + "ODS template" : "ODS template", + "ODT document" : "ODT document", + "ODT document (Flat XML)" : "ODT document (Flat XML)", + "ODT template" : "ODT template", + "PowerPoint 2007 presentation" : "PowerPoint 2007 presentation", + "PowerPoint 2007 show" : "PowerPoint 2007 show", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 presentation template", + "Excel 2007 spreadsheet" : "Excel 2007 spreadsheet", + "Excel 2007 spreadsheet template" : "Excel 2007 spreadsheet template", + "Word 2007 document" : "Word 2007 document", + "Word 2007 document template" : "Word 2007 document template", + "Microsoft Visio document" : "Microsoft Visio document", + "WordPerfect document" : "WordPerfect document", + "7-zip archive" : "7-zip archive", + "Blender scene" : "Blender scene", + "Bzip2 archive" : "Bzip2 archive", + "Debian package" : "Debian package", + "FictionBook document" : "FictionBook document", + "Unknown font" : "Unknown font", + "Krita document" : "Krita document", + "Mobipocket e-book" : "Mobipocket e-book", + "Windows Installer package" : "Windows Installer package", + "Perl script" : "Perl script", + "PHP script" : "PHP script", + "Tar archive" : "Tar archive", + "XML document" : "XML document", + "YAML document" : "YAML document", + "Zip archive" : "Zip archive", + "Zstandard archive" : "Zstandard archive", + "AAC audio" : "AAC audio", + "FLAC audio" : "FLAC audio", + "MPEG-4 audio" : "MPEG-4 audio", + "MP3 audio" : "MP3 audio", + "Ogg audio" : "Ogg audio", + "RIFF/WAVe standard Audio" : "RIFF/WAVe standard Audio", + "WebM audio" : "WebM audio", + "MP3 ShoutCast playlist" : "MP3 ShoutCast playlist", + "Windows BMP image" : "Windows BMP image", + "Better Portable Graphics image" : "Better Portable Graphics image", + "EMF image" : "EMF image", + "GIF image" : "GIF image", + "HEIC image" : "HEIC image", + "HEIF image" : "HEIF image", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 image", + "JPEG image" : "JPEG image", "PNG image" : "PNG image", + "SVG image" : "SVG image", + "Truevision Targa image" : "Truevision Targa image", + "TIFF image" : "TIFF image", + "WebP image" : "WebP image", + "Digital raw image" : "Digital raw image", + "Windows Icon" : "Windows Icon", + "Email message" : "Email message", + "VCS/ICS calendar" : "VCS/ICS calendar", + "CSS stylesheet" : "CSS stylesheet", + "CSV document" : "CSV document", + "HTML document" : "HTML document", + "Markdown document" : "Markdown document", + "Org-mode file" : "Org-mode file", + "Plain text document" : "Plain text document", + "Rich Text document" : "Rich Text document", + "Electronic business card" : "Electronic business card", + "C++ source code" : "C++ source code", + "LDIF address book" : "LDIF address book", + "NFO document" : "NFO document", + "PHP source" : "PHP source", + "Python script" : "Python script", + "ReStructuredText document" : "ReStructuredText document", + "3GPP multimedia file" : "3GPP multimedia file", + "MPEG video" : "MPEG video", + "DV video" : "DV video", + "MPEG-2 transport stream" : "MPEG-2 transport stream", + "MPEG-4 video" : "MPEG-4 video", + "Ogg video" : "Ogg video", + "QuickTime video" : "QuickTime video", + "WebM video" : "WebM video", + "Flash video" : "Flash video", + "Matroska video" : "Matroska video", + "Windows Media video" : "Windows Media video", + "AVI video" : "AVI video", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", "For more details see the {linkstart}documentation ↗{linkend}." : "For more details see the {linkstart}documentation ↗{linkend}.", "unknown text" : "unknown text", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index 2f0842f0550..1f19622959e 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -78,8 +78,125 @@ "%s (incompatible)" : "%s (incompatible)", "The following apps have been disabled: %s" : "The following apps have been disabled: %s", "Already up to date" : "Already up to date", + "Windows Command Script" : "Windows Command Script", + "Electronic book document" : "Electronic book document", + "TrueType Font Collection" : "TrueType Font Collection", + "Web Open Font Format" : "Web Open Font Format", + "GPX geographic data" : "GPX geographic data", + "Gzip archive" : "Gzip archive", + "Adobe Illustrator document" : "Adobe Illustrator document", + "Java source code" : "Java source code", + "JavaScript source code" : "JavaScript source code", + "JSON document" : "JSON document", + "Microsoft Access database" : "Microsoft Access database", + "Microsoft OneNote document" : "Microsoft OneNote document", + "Microsoft Word document" : "Microsoft Word document", "Unknown" : "Unknown", + "PDF document" : "PDF document", + "PostScript document" : "PostScript document", + "RSS summary" : "RSS summary", + "Android package" : "Android package", + "KML geographic data" : "KML geographic data", + "KML geographic compressed data" : "KML geographic compressed data", + "Lotus Word Pro document" : "Lotus Word Pro document", + "Excel spreadsheet" : "Excel spreadsheet", + "Excel add-in" : "Excel add-in", + "Excel 2007 binary spreadsheet" : "Excel 2007 binary spreadsheet", + "Excel spreadsheet template" : "Excel spreadsheet template", + "Outlook Message" : "Outlook Message", + "PowerPoint presentation" : "PowerPoint presentation", + "PowerPoint add-in" : "PowerPoint add-in", + "PowerPoint presentation template" : "PowerPoint presentation template", + "Word document" : "Word document", + "ODF formula" : "ODF formula", + "ODG drawing" : "ODG drawing", + "ODG drawing (Flat XML)" : "ODG drawing (Flat XML)", + "ODG template" : "ODG template", + "ODP presentation" : "ODP presentation", + "ODP presentation (Flat XML)" : "ODP presentation (Flat XML)", + "ODP template" : "ODP template", + "ODS spreadsheet" : "ODS spreadsheet", + "ODS spreadsheet (Flat XML)" : "ODS spreadsheet (Flat XML)", + "ODS template" : "ODS template", + "ODT document" : "ODT document", + "ODT document (Flat XML)" : "ODT document (Flat XML)", + "ODT template" : "ODT template", + "PowerPoint 2007 presentation" : "PowerPoint 2007 presentation", + "PowerPoint 2007 show" : "PowerPoint 2007 show", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 presentation template", + "Excel 2007 spreadsheet" : "Excel 2007 spreadsheet", + "Excel 2007 spreadsheet template" : "Excel 2007 spreadsheet template", + "Word 2007 document" : "Word 2007 document", + "Word 2007 document template" : "Word 2007 document template", + "Microsoft Visio document" : "Microsoft Visio document", + "WordPerfect document" : "WordPerfect document", + "7-zip archive" : "7-zip archive", + "Blender scene" : "Blender scene", + "Bzip2 archive" : "Bzip2 archive", + "Debian package" : "Debian package", + "FictionBook document" : "FictionBook document", + "Unknown font" : "Unknown font", + "Krita document" : "Krita document", + "Mobipocket e-book" : "Mobipocket e-book", + "Windows Installer package" : "Windows Installer package", + "Perl script" : "Perl script", + "PHP script" : "PHP script", + "Tar archive" : "Tar archive", + "XML document" : "XML document", + "YAML document" : "YAML document", + "Zip archive" : "Zip archive", + "Zstandard archive" : "Zstandard archive", + "AAC audio" : "AAC audio", + "FLAC audio" : "FLAC audio", + "MPEG-4 audio" : "MPEG-4 audio", + "MP3 audio" : "MP3 audio", + "Ogg audio" : "Ogg audio", + "RIFF/WAVe standard Audio" : "RIFF/WAVe standard Audio", + "WebM audio" : "WebM audio", + "MP3 ShoutCast playlist" : "MP3 ShoutCast playlist", + "Windows BMP image" : "Windows BMP image", + "Better Portable Graphics image" : "Better Portable Graphics image", + "EMF image" : "EMF image", + "GIF image" : "GIF image", + "HEIC image" : "HEIC image", + "HEIF image" : "HEIF image", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 image", + "JPEG image" : "JPEG image", "PNG image" : "PNG image", + "SVG image" : "SVG image", + "Truevision Targa image" : "Truevision Targa image", + "TIFF image" : "TIFF image", + "WebP image" : "WebP image", + "Digital raw image" : "Digital raw image", + "Windows Icon" : "Windows Icon", + "Email message" : "Email message", + "VCS/ICS calendar" : "VCS/ICS calendar", + "CSS stylesheet" : "CSS stylesheet", + "CSV document" : "CSV document", + "HTML document" : "HTML document", + "Markdown document" : "Markdown document", + "Org-mode file" : "Org-mode file", + "Plain text document" : "Plain text document", + "Rich Text document" : "Rich Text document", + "Electronic business card" : "Electronic business card", + "C++ source code" : "C++ source code", + "LDIF address book" : "LDIF address book", + "NFO document" : "NFO document", + "PHP source" : "PHP source", + "Python script" : "Python script", + "ReStructuredText document" : "ReStructuredText document", + "3GPP multimedia file" : "3GPP multimedia file", + "MPEG video" : "MPEG video", + "DV video" : "DV video", + "MPEG-2 transport stream" : "MPEG-2 transport stream", + "MPEG-4 video" : "MPEG-4 video", + "Ogg video" : "Ogg video", + "QuickTime video" : "QuickTime video", + "WebM video" : "WebM video", + "Flash video" : "Flash video", + "Matroska video" : "Matroska video", + "Windows Media video" : "Windows Media video", + "AVI video" : "AVI video", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", "For more details see the {linkstart}documentation ↗{linkend}." : "For more details see the {linkstart}documentation ↗{linkend}.", "unknown text" : "unknown text", diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index 67067611564..59587290fd1 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -80,7 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (pole ühilduv)", "The following apps have been disabled: %s" : "Järgmised rakendused lülitati välja: %s", "Already up to date" : "On juba ajakohane", + "Windows Command Script" : "Windows Commandi skript", + "Electronic book document" : "E-raamatu dokument", + "TrueType Font Collection" : "TrueType'i kirjatüüpide kogumik", + "Web Open Font Format" : "Web Open Font vorming", + "GPX geographic data" : "GPX-i geoandmed", + "Gzip archive" : "Gzipi arhiivifail", + "Adobe Illustrator document" : "Adobe Illustratori dokument", + "Java source code" : "Java lähtekood", + "JavaScript source code" : "JavaScripti lähtekood", + "JSON document" : "JSON-dokument", + "Microsoft Access database" : "Microsoft Accessi andmebaas", + "Microsoft OneNote document" : "Microsoft OneNote'i dokument", + "Microsoft Word document" : "Microsoft Wordi dokument", "Unknown" : "Teadmata", + "PDF document" : "PDF-dokument", + "PostScript document" : "PostScripti dokument", + "RSS summary" : "RSS-i kokkuvõte", + "Android package" : "Androidi pakett", + "KML geographic data" : "KML-i geoandmed", + "KML geographic compressed data" : "KML-i pakitud geoandmed", + "Lotus Word Pro document" : "Lotus Word Pro dokument", + "Excel spreadsheet" : "Exceli arvutustabel", + "Excel add-in" : "Exceli lisamoodul", + "Excel 2007 binary spreadsheet" : "Excel 2007 kompileeritud arvutustabel", + "Excel spreadsheet template" : "Exceli arvutustabeli mall", + "Outlook Message" : "Outlooki e-kiri", + "PowerPoint presentation" : "PowerPointi esitlus", + "PowerPoint add-in" : "PowerPointi lisamoodul", + "PowerPoint presentation template" : "PowerPointi esitluse mall", + "Word document" : "Wordi dokument", + "ODF formula" : "ODF-i valem", + "ODG drawing" : "ODG joonistus", + "ODG drawing (Flat XML)" : "ODG joonistus (Flat XML)", + "ODG template" : "ODG joonistuse mall", + "ODP presentation" : "ODP esitlus", + "ODP presentation (Flat XML)" : "ODP esitlus (Flat XML)", + "ODP template" : "ODP esitluse mall", + "ODS spreadsheet" : "ODS-i arvutustabel", + "ODS spreadsheet (Flat XML)" : "ODS-i arvutustabel (Flat XML)", + "ODS template" : "ODS-i arvutustabeli mall", + "ODT document" : "ODT dokument", + "ODT document (Flat XML)" : "ODT dokument (Flat XML)", + "ODT template" : "ODT dokumendi mall", + "PowerPoint 2007 presentation" : "PowerPoint 2007 esitlus", + "PowerPoint 2007 show" : "PowerPoint 2007 slaidiesitlus", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 esitluse mall", + "Excel 2007 spreadsheet" : "Excel 2007 arvutustabel", + "Excel 2007 spreadsheet template" : "Excel 2007 arvutustabeli mall", + "Word 2007 document" : "Word 2007 dokument", + "Word 2007 document template" : "Word 2007 dokumendimall", + "Microsoft Visio document" : "Microsoft Visio dokument", + "WordPerfect document" : "WordPerfecti dokument", + "7-zip archive" : "7-zip arhiivifail", + "Blender scene" : "Blenderi stseen", + "Bzip2 archive" : "Bzip2 arhiivifail", + "Debian package" : "Debian pakett", + "FictionBook document" : "FictionBooki dokument", + "Unknown font" : "Tundmatu kirjatüüp", + "Krita document" : "Krita dokument", + "Mobipocket e-book" : "Mobipocketi e-raamat", + "Windows Installer package" : "Windows Installeri pakett", + "Perl script" : "Perli skript", + "PHP script" : "PHP skript", + "Tar archive" : "Tari arhiivifail", + "XML document" : "XML-dokument", + "YAML document" : "YAML-dokument", + "Zip archive" : "Zipi arhiivifail", + "Zstandard archive" : "Zstandardi arhiivifail", + "AAC audio" : "AAC helifail", + "FLAC audio" : "FLAC helifail", + "MPEG-4 audio" : "MPEG-4 helifail", + "MP3 audio" : "MP3 helifail", + "Ogg audio" : "Ogg helifail", + "RIFF/WAVe standard Audio" : "RIFF/WAVe standardne helifail", + "WebM audio" : "WebM helifail", + "MP3 ShoutCast playlist" : "MP3 ShoutCasti esitusloend", + "Windows BMP image" : "Windows BMP pilt", + "Better Portable Graphics image" : "Better Portable Graphicsi pilt", + "EMF image" : "EMF pilt", + "GIF image" : "GIF pilt", + "HEIC image" : "HEIC pilt", + "HEIF image" : "HEIF pilt", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 pilt", + "JPEG image" : "JPEG pilt", + "PNG image" : "PNG pilt", + "SVG image" : "SVG pilt", + "Truevision Targa image" : "Truevision Targa pilt", + "TIFF image" : "TIFF pilt", + "WebP image" : "WebP pilt", + "Digital raw image" : "Digitaalne töötlemata pilt", + "Windows Icon" : "Windowsi ikoon", + "Email message" : "E-kiri", + "VCS/ICS calendar" : "VCS/ICS-i kalender", + "CSS stylesheet" : "CSS-i laaditabel", + "CSV document" : "CSV-dokument", + "HTML document" : "HTML-dokument", + "Markdown document" : "Markdowni dokument", + "Org-mode file" : "Org-mode'i fail", + "Plain text document" : "Vormindamata tekstidokument", + "Rich Text document" : "Vormindatud tekstidokument", + "Electronic business card" : "Elektrooniline visiitkaart", + "C++ source code" : "C++ lähtekood", + "LDIF address book" : "LDIF-i aaddressiraamat", + "NFO document" : "NFO-dokument", + "PHP source" : "PHP lähtekood", + "Python script" : "Pythoni skript", + "ReStructuredText document" : "ReStructuredTexti dokument", + "3GPP multimedia file" : "3GPP multimeediafail", + "MPEG video" : "MPEG video", + "DV video" : "DV video", + "MPEG-2 transport stream" : "MPEG-2 transport stream", + "MPEG-4 video" : "MPEG-4 video", + "Ogg video" : "Ogg video", + "QuickTime video" : "QuickTime video", + "WebM video" : "WebM video", + "Flash video" : "Flash video", + "Matroska video" : "Matroska video", + "Windows Media video" : "Windows Media video", + "AVI video" : "AVI video", "Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga", "For more details see the {linkstart}documentation ↗{linkend}." : "Lisateavet leiad {linkstart}dokumentatsioonist ↗{linkend}.", "unknown text" : "tundmatu tekst", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index 20f8d914eec..a796bd741c3 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -78,7 +78,125 @@ "%s (incompatible)" : "%s (pole ühilduv)", "The following apps have been disabled: %s" : "Järgmised rakendused lülitati välja: %s", "Already up to date" : "On juba ajakohane", + "Windows Command Script" : "Windows Commandi skript", + "Electronic book document" : "E-raamatu dokument", + "TrueType Font Collection" : "TrueType'i kirjatüüpide kogumik", + "Web Open Font Format" : "Web Open Font vorming", + "GPX geographic data" : "GPX-i geoandmed", + "Gzip archive" : "Gzipi arhiivifail", + "Adobe Illustrator document" : "Adobe Illustratori dokument", + "Java source code" : "Java lähtekood", + "JavaScript source code" : "JavaScripti lähtekood", + "JSON document" : "JSON-dokument", + "Microsoft Access database" : "Microsoft Accessi andmebaas", + "Microsoft OneNote document" : "Microsoft OneNote'i dokument", + "Microsoft Word document" : "Microsoft Wordi dokument", "Unknown" : "Teadmata", + "PDF document" : "PDF-dokument", + "PostScript document" : "PostScripti dokument", + "RSS summary" : "RSS-i kokkuvõte", + "Android package" : "Androidi pakett", + "KML geographic data" : "KML-i geoandmed", + "KML geographic compressed data" : "KML-i pakitud geoandmed", + "Lotus Word Pro document" : "Lotus Word Pro dokument", + "Excel spreadsheet" : "Exceli arvutustabel", + "Excel add-in" : "Exceli lisamoodul", + "Excel 2007 binary spreadsheet" : "Excel 2007 kompileeritud arvutustabel", + "Excel spreadsheet template" : "Exceli arvutustabeli mall", + "Outlook Message" : "Outlooki e-kiri", + "PowerPoint presentation" : "PowerPointi esitlus", + "PowerPoint add-in" : "PowerPointi lisamoodul", + "PowerPoint presentation template" : "PowerPointi esitluse mall", + "Word document" : "Wordi dokument", + "ODF formula" : "ODF-i valem", + "ODG drawing" : "ODG joonistus", + "ODG drawing (Flat XML)" : "ODG joonistus (Flat XML)", + "ODG template" : "ODG joonistuse mall", + "ODP presentation" : "ODP esitlus", + "ODP presentation (Flat XML)" : "ODP esitlus (Flat XML)", + "ODP template" : "ODP esitluse mall", + "ODS spreadsheet" : "ODS-i arvutustabel", + "ODS spreadsheet (Flat XML)" : "ODS-i arvutustabel (Flat XML)", + "ODS template" : "ODS-i arvutustabeli mall", + "ODT document" : "ODT dokument", + "ODT document (Flat XML)" : "ODT dokument (Flat XML)", + "ODT template" : "ODT dokumendi mall", + "PowerPoint 2007 presentation" : "PowerPoint 2007 esitlus", + "PowerPoint 2007 show" : "PowerPoint 2007 slaidiesitlus", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 esitluse mall", + "Excel 2007 spreadsheet" : "Excel 2007 arvutustabel", + "Excel 2007 spreadsheet template" : "Excel 2007 arvutustabeli mall", + "Word 2007 document" : "Word 2007 dokument", + "Word 2007 document template" : "Word 2007 dokumendimall", + "Microsoft Visio document" : "Microsoft Visio dokument", + "WordPerfect document" : "WordPerfecti dokument", + "7-zip archive" : "7-zip arhiivifail", + "Blender scene" : "Blenderi stseen", + "Bzip2 archive" : "Bzip2 arhiivifail", + "Debian package" : "Debian pakett", + "FictionBook document" : "FictionBooki dokument", + "Unknown font" : "Tundmatu kirjatüüp", + "Krita document" : "Krita dokument", + "Mobipocket e-book" : "Mobipocketi e-raamat", + "Windows Installer package" : "Windows Installeri pakett", + "Perl script" : "Perli skript", + "PHP script" : "PHP skript", + "Tar archive" : "Tari arhiivifail", + "XML document" : "XML-dokument", + "YAML document" : "YAML-dokument", + "Zip archive" : "Zipi arhiivifail", + "Zstandard archive" : "Zstandardi arhiivifail", + "AAC audio" : "AAC helifail", + "FLAC audio" : "FLAC helifail", + "MPEG-4 audio" : "MPEG-4 helifail", + "MP3 audio" : "MP3 helifail", + "Ogg audio" : "Ogg helifail", + "RIFF/WAVe standard Audio" : "RIFF/WAVe standardne helifail", + "WebM audio" : "WebM helifail", + "MP3 ShoutCast playlist" : "MP3 ShoutCasti esitusloend", + "Windows BMP image" : "Windows BMP pilt", + "Better Portable Graphics image" : "Better Portable Graphicsi pilt", + "EMF image" : "EMF pilt", + "GIF image" : "GIF pilt", + "HEIC image" : "HEIC pilt", + "HEIF image" : "HEIF pilt", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 pilt", + "JPEG image" : "JPEG pilt", + "PNG image" : "PNG pilt", + "SVG image" : "SVG pilt", + "Truevision Targa image" : "Truevision Targa pilt", + "TIFF image" : "TIFF pilt", + "WebP image" : "WebP pilt", + "Digital raw image" : "Digitaalne töötlemata pilt", + "Windows Icon" : "Windowsi ikoon", + "Email message" : "E-kiri", + "VCS/ICS calendar" : "VCS/ICS-i kalender", + "CSS stylesheet" : "CSS-i laaditabel", + "CSV document" : "CSV-dokument", + "HTML document" : "HTML-dokument", + "Markdown document" : "Markdowni dokument", + "Org-mode file" : "Org-mode'i fail", + "Plain text document" : "Vormindamata tekstidokument", + "Rich Text document" : "Vormindatud tekstidokument", + "Electronic business card" : "Elektrooniline visiitkaart", + "C++ source code" : "C++ lähtekood", + "LDIF address book" : "LDIF-i aaddressiraamat", + "NFO document" : "NFO-dokument", + "PHP source" : "PHP lähtekood", + "Python script" : "Pythoni skript", + "ReStructuredText document" : "ReStructuredTexti dokument", + "3GPP multimedia file" : "3GPP multimeediafail", + "MPEG video" : "MPEG video", + "DV video" : "DV video", + "MPEG-2 transport stream" : "MPEG-2 transport stream", + "MPEG-4 video" : "MPEG-4 video", + "Ogg video" : "Ogg video", + "QuickTime video" : "QuickTime video", + "WebM video" : "WebM video", + "Flash video" : "Flash video", + "Matroska video" : "Matroska video", + "Windows Media video" : "Windows Media video", + "AVI video" : "AVI video", "Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga", "For more details see the {linkstart}documentation ↗{linkend}." : "Lisateavet leiad {linkstart}dokumentatsioonist ↗{linkend}.", "unknown text" : "tundmatu tekst", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index 4e4a74837fa..d14ee4e5ec1 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -80,7 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (非互換)", "The following apps have been disabled: %s" : "次のアプリが無効になりました: %s ", "Already up to date" : "すべて更新済", + "Windows Command Script" : "Windowsコマンドスクリプト", + "Electronic book document" : "電子書籍ドキュメント", + "TrueType Font Collection" : "TrueTypeフォントコレクション", + "Web Open Font Format" : "Webオープンフォント形式", + "GPX geographic data" : "GPX地理データ", + "Gzip archive" : "Gzipアーカイブ", + "Adobe Illustrator document" : "Adobe Illustratorドキュメント", + "Java source code" : "Javaソースコード", + "JavaScript source code" : "JavaScriptソースコード", + "JSON document" : "JSONドキュメント", + "Microsoft Access database" : "Microsoft Accessデータベース", + "Microsoft OneNote document" : "Microsoft OneNoteドキュメント", + "Microsoft Word document" : "Microsoft Wordドキュメント", "Unknown" : "不明", + "PDF document" : "PDFドキュメント", + "PostScript document" : "PostScriptドキュメント", + "RSS summary" : "RSS概要", + "Android package" : "Androidパッケージ", + "KML geographic data" : "KML地理データ", + "KML geographic compressed data" : "KML地理圧縮データ", + "Lotus Word Pro document" : "Lotus Word Proドキュメント", + "Excel spreadsheet" : "Excelスプレッドシート", + "Excel add-in" : "Excelアドイン", + "Excel 2007 binary spreadsheet" : "Excel 2007バイナリスプレッドシート", + "Excel spreadsheet template" : "Excelスプレッドシートテンプレート", + "Outlook Message" : "Outlookメッセージ", + "PowerPoint presentation" : "PowerPointプレゼンテーション", + "PowerPoint add-in" : "PowerPointアドイン", + "PowerPoint presentation template" : "PowerPointプレゼンテーションテンプレート", + "Word document" : "Wordドキュメント", + "ODF formula" : "ODFフォーミュラ", + "ODG drawing" : "ODG図面", + "ODG drawing (Flat XML)" : "ODG 図面 (フラット XML)", + "ODG template" : "ODGテンプレート", + "ODP presentation" : "ODPプレゼンテーション", + "ODP presentation (Flat XML)" : "ODPプレゼンテーション (フラット XML)", + "ODP template" : "ODPテンプレート", + "ODS spreadsheet" : "ODSスプレッドシート", + "ODS spreadsheet (Flat XML)" : "ODSスプレッドシート (フラット XML)", + "ODS template" : "ODSテンプレート", + "ODT document" : "ODTドキュメント", + "ODT document (Flat XML)" : "ODTドキュメント (フラット XML)", + "ODT template" : "ODTテンプレート", + "PowerPoint 2007 presentation" : "PowerPoint 2007プレゼンテーション", + "PowerPoint 2007 show" : "PowerPoint 2007 表示", + "PowerPoint 2007 presentation template" : "PowerPoint 2007プレゼンテーションテンプレート", + "Excel 2007 spreadsheet" : "Excel 2007スプレッドシート", + "Excel 2007 spreadsheet template" : "Excel 2007スプレッドシートテンプレート", + "Word 2007 document" : "Word 2007ドキュメント", + "Word 2007 document template" : "Word 2007ドキュメントテンプレート", + "Microsoft Visio document" : "Microsoft Visioドキュメント", + "WordPerfect document" : "WordPerfectドキュメント", + "7-zip archive" : "7-zipアーカイブ", + "Blender scene" : "Blenderシーン", + "Bzip2 archive" : "Bzip2アーカイブ", + "Debian package" : "Debianパッケージ", + "FictionBook document" : "FictionBookドキュメント", + "Unknown font" : "不明なフォント", + "Krita document" : "Kritaドキュメント", + "Mobipocket e-book" : "Mobipocket 電子書籍", + "Windows Installer package" : "Windowsインストーラーパッケージ", + "Perl script" : "Perlスクリプト", + "PHP script" : "PHPスクリプト", + "Tar archive" : "Tarアーカイブ", + "XML document" : "XMLドキュメント", + "YAML document" : "YAMLドキュメント", + "Zip archive" : "Zipアーカイブ", + "Zstandard archive" : "Zstandardアーカイブ", + "AAC audio" : "AAC音声", + "FLAC audio" : "FLAC音声", + "MPEG-4 audio" : "MPEG-4音声", + "MP3 audio" : "MP3音声", + "Ogg audio" : "Ogg音声", + "RIFF/WAVe standard Audio" : "RIFF/WAVeスタンダード音声", + "WebM audio" : "WebM音声", + "MP3 ShoutCast playlist" : "MP3 ShoutCastプレイリスト", + "Windows BMP image" : "Windows BMP画像", + "Better Portable Graphics image" : "Better Portable Graphics画像", + "EMF image" : "EMF画像", + "GIF image" : "GIF画像", + "HEIC image" : "HEIC画像", + "HEIF image" : "HEIF画像", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2画像", + "JPEG image" : "JPEG画像", + "PNG image" : "PNG画像", + "SVG image" : "SVG画像", + "Truevision Targa image" : "Truevision Targa画像", + "TIFF image" : "TIFF画像", + "WebP image" : "WebP画像", + "Digital raw image" : "Digital raw画像", + "Windows Icon" : "Windowsアイコン", + "Email message" : "メールメッセージ", + "VCS/ICS calendar" : "VCS/ICSカレンダー", + "CSS stylesheet" : "CSSスタイルシート", + "CSV document" : "CSVドキュメント", + "HTML document" : "HTMLドキュメント", + "Markdown document" : "Markdownドキュメント", + "Org-mode file" : "Org-modeファイル", + "Plain text document" : "プレーンテキストドキュメント", + "Rich Text document" : "リッチテキストドキュメント", + "Electronic business card" : "電子ビジネスカード", + "C++ source code" : "C++ソースコード", + "LDIF address book" : "LDIFアドレス帳", + "NFO document" : "NFOドキュメント", + "PHP source" : "PHPソース", + "Python script" : "Pythonスクリプト", + "ReStructuredText document" : "ReStructuredTextドキュメント", + "3GPP multimedia file" : "3GPPマルチメディアファイル", + "MPEG video" : "MPEGビデオ", + "DV video" : "DVビデオ", + "MPEG-2 transport stream" : "MPEG-2トランスポートストリーム", + "MPEG-4 video" : "MPEG-4ビデオ", + "Ogg video" : "Oggビデオ", + "QuickTime video" : "QuickTimeビデオ", + "WebM video" : "WebMビデオ", + "Flash video" : "Flashビデオ", + "Matroska video" : "Matroskaビデオ", + "Windows Media video" : "Windows Mediaビデオ", + "AVI video" : "AVI ビデオ", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", "For more details see the {linkstart}documentation ↗{linkend}." : "詳細については、{linkstart}ドキュメント↗{linkend}を参照してください。", "unknown text" : "不明なテキスト", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index be0d6b0b8f4..a3aba7d42f5 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -78,7 +78,125 @@ "%s (incompatible)" : "%s (非互換)", "The following apps have been disabled: %s" : "次のアプリが無効になりました: %s ", "Already up to date" : "すべて更新済", + "Windows Command Script" : "Windowsコマンドスクリプト", + "Electronic book document" : "電子書籍ドキュメント", + "TrueType Font Collection" : "TrueTypeフォントコレクション", + "Web Open Font Format" : "Webオープンフォント形式", + "GPX geographic data" : "GPX地理データ", + "Gzip archive" : "Gzipアーカイブ", + "Adobe Illustrator document" : "Adobe Illustratorドキュメント", + "Java source code" : "Javaソースコード", + "JavaScript source code" : "JavaScriptソースコード", + "JSON document" : "JSONドキュメント", + "Microsoft Access database" : "Microsoft Accessデータベース", + "Microsoft OneNote document" : "Microsoft OneNoteドキュメント", + "Microsoft Word document" : "Microsoft Wordドキュメント", "Unknown" : "不明", + "PDF document" : "PDFドキュメント", + "PostScript document" : "PostScriptドキュメント", + "RSS summary" : "RSS概要", + "Android package" : "Androidパッケージ", + "KML geographic data" : "KML地理データ", + "KML geographic compressed data" : "KML地理圧縮データ", + "Lotus Word Pro document" : "Lotus Word Proドキュメント", + "Excel spreadsheet" : "Excelスプレッドシート", + "Excel add-in" : "Excelアドイン", + "Excel 2007 binary spreadsheet" : "Excel 2007バイナリスプレッドシート", + "Excel spreadsheet template" : "Excelスプレッドシートテンプレート", + "Outlook Message" : "Outlookメッセージ", + "PowerPoint presentation" : "PowerPointプレゼンテーション", + "PowerPoint add-in" : "PowerPointアドイン", + "PowerPoint presentation template" : "PowerPointプレゼンテーションテンプレート", + "Word document" : "Wordドキュメント", + "ODF formula" : "ODFフォーミュラ", + "ODG drawing" : "ODG図面", + "ODG drawing (Flat XML)" : "ODG 図面 (フラット XML)", + "ODG template" : "ODGテンプレート", + "ODP presentation" : "ODPプレゼンテーション", + "ODP presentation (Flat XML)" : "ODPプレゼンテーション (フラット XML)", + "ODP template" : "ODPテンプレート", + "ODS spreadsheet" : "ODSスプレッドシート", + "ODS spreadsheet (Flat XML)" : "ODSスプレッドシート (フラット XML)", + "ODS template" : "ODSテンプレート", + "ODT document" : "ODTドキュメント", + "ODT document (Flat XML)" : "ODTドキュメント (フラット XML)", + "ODT template" : "ODTテンプレート", + "PowerPoint 2007 presentation" : "PowerPoint 2007プレゼンテーション", + "PowerPoint 2007 show" : "PowerPoint 2007 表示", + "PowerPoint 2007 presentation template" : "PowerPoint 2007プレゼンテーションテンプレート", + "Excel 2007 spreadsheet" : "Excel 2007スプレッドシート", + "Excel 2007 spreadsheet template" : "Excel 2007スプレッドシートテンプレート", + "Word 2007 document" : "Word 2007ドキュメント", + "Word 2007 document template" : "Word 2007ドキュメントテンプレート", + "Microsoft Visio document" : "Microsoft Visioドキュメント", + "WordPerfect document" : "WordPerfectドキュメント", + "7-zip archive" : "7-zipアーカイブ", + "Blender scene" : "Blenderシーン", + "Bzip2 archive" : "Bzip2アーカイブ", + "Debian package" : "Debianパッケージ", + "FictionBook document" : "FictionBookドキュメント", + "Unknown font" : "不明なフォント", + "Krita document" : "Kritaドキュメント", + "Mobipocket e-book" : "Mobipocket 電子書籍", + "Windows Installer package" : "Windowsインストーラーパッケージ", + "Perl script" : "Perlスクリプト", + "PHP script" : "PHPスクリプト", + "Tar archive" : "Tarアーカイブ", + "XML document" : "XMLドキュメント", + "YAML document" : "YAMLドキュメント", + "Zip archive" : "Zipアーカイブ", + "Zstandard archive" : "Zstandardアーカイブ", + "AAC audio" : "AAC音声", + "FLAC audio" : "FLAC音声", + "MPEG-4 audio" : "MPEG-4音声", + "MP3 audio" : "MP3音声", + "Ogg audio" : "Ogg音声", + "RIFF/WAVe standard Audio" : "RIFF/WAVeスタンダード音声", + "WebM audio" : "WebM音声", + "MP3 ShoutCast playlist" : "MP3 ShoutCastプレイリスト", + "Windows BMP image" : "Windows BMP画像", + "Better Portable Graphics image" : "Better Portable Graphics画像", + "EMF image" : "EMF画像", + "GIF image" : "GIF画像", + "HEIC image" : "HEIC画像", + "HEIF image" : "HEIF画像", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2画像", + "JPEG image" : "JPEG画像", + "PNG image" : "PNG画像", + "SVG image" : "SVG画像", + "Truevision Targa image" : "Truevision Targa画像", + "TIFF image" : "TIFF画像", + "WebP image" : "WebP画像", + "Digital raw image" : "Digital raw画像", + "Windows Icon" : "Windowsアイコン", + "Email message" : "メールメッセージ", + "VCS/ICS calendar" : "VCS/ICSカレンダー", + "CSS stylesheet" : "CSSスタイルシート", + "CSV document" : "CSVドキュメント", + "HTML document" : "HTMLドキュメント", + "Markdown document" : "Markdownドキュメント", + "Org-mode file" : "Org-modeファイル", + "Plain text document" : "プレーンテキストドキュメント", + "Rich Text document" : "リッチテキストドキュメント", + "Electronic business card" : "電子ビジネスカード", + "C++ source code" : "C++ソースコード", + "LDIF address book" : "LDIFアドレス帳", + "NFO document" : "NFOドキュメント", + "PHP source" : "PHPソース", + "Python script" : "Pythonスクリプト", + "ReStructuredText document" : "ReStructuredTextドキュメント", + "3GPP multimedia file" : "3GPPマルチメディアファイル", + "MPEG video" : "MPEGビデオ", + "DV video" : "DVビデオ", + "MPEG-2 transport stream" : "MPEG-2トランスポートストリーム", + "MPEG-4 video" : "MPEG-4ビデオ", + "Ogg video" : "Oggビデオ", + "QuickTime video" : "QuickTimeビデオ", + "WebM video" : "WebMビデオ", + "Flash video" : "Flashビデオ", + "Matroska video" : "Matroskaビデオ", + "Windows Media video" : "Windows Mediaビデオ", + "AVI video" : "AVI ビデオ", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", "For more details see the {linkstart}documentation ↗{linkend}." : "詳細については、{linkstart}ドキュメント↗{linkend}を参照してください。", "unknown text" : "不明なテキスト", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 73879f8d07c..97590c13b40 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -80,8 +80,124 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatível)", "The following apps have been disabled: %s" : "Os seguintes aplicativos foram desativados: %s", "Already up to date" : "Já está atualizado", + "Windows Command Script" : "Script de Comando do Windows", + "Electronic book document" : "Documento de livro eletrônico", + "TrueType Font Collection" : "Coleção de Fontes TrueType", + "Web Open Font Format" : "Formato de Fonte Aberta da Web", + "GPX geographic data" : "Dados geográficos GPX", + "Gzip archive" : "Arquivo gzip", + "Adobe Illustrator document" : "Documento do Adobe Illustrator", + "Java source code" : "Código-fonte Java", + "JavaScript source code" : "Código-fonte JavaScript", + "JSON document" : "Documento JSON", + "Microsoft Access database" : "Banco de dados do Microsoft Access", + "Microsoft OneNote document" : "Documento do Microsoft OneNote", + "Microsoft Word document" : "Documento do Microsoft Word", "Unknown" : "Desconhecida", + "PDF document" : "Documento PDF", + "PostScript document" : "Documento PostScript", + "RSS summary" : "Resumo RSS", + "Android package" : "Pacote para Android", + "KML geographic data" : "Dados geográficos KML", + "KML geographic compressed data" : "Dados comprimidos geográficos KML", + "Lotus Word Pro document" : "Documento do Lotus Word Pro", + "Excel spreadsheet" : "Planilha do Excel", + "Excel add-in" : "Suplemento do Excel", + "Excel 2007 binary spreadsheet" : "Planilha binária do Excel 2007", + "Excel spreadsheet template" : "Modelo de planilha do Excel", + "Outlook Message" : "Mensagem do Outlook", + "PowerPoint presentation" : "Apresentação do PowerPoint", + "PowerPoint add-in" : "Suplemento do PowerPoint", + "PowerPoint presentation template" : "Modelo de apresentação do PowerPoint", + "Word document" : "Documento do Word", + "ODF formula" : "Fórmula ODF", + "ODG drawing" : "Desenho ODG", + "ODG drawing (Flat XML)" : "Desenho ODG (XML plano)", + "ODG template" : "Modelo ODG", + "ODP presentation" : "Apresentação ODP", + "ODP presentation (Flat XML)" : "Apresentação ODP (XML plano)", + "ODP template" : "Modelo ODP", + "ODS spreadsheet" : "Planilha ODS", + "ODS spreadsheet (Flat XML)" : "Planilha ODS (XML plano)", + "ODS template" : "Modelo ODS", + "ODT document" : "Documento ODT", + "ODT document (Flat XML)" : "Documento ODT (XML plano)", + "ODT template" : "Modelo ODT", + "PowerPoint 2007 presentation" : "Apresentação do Powerpoint 2007", + "PowerPoint 2007 show" : "Show do PowerPoint 2007", + "PowerPoint 2007 presentation template" : "Modelo de apresentação do PowerPoint 2007", + "Excel 2007 spreadsheet" : "Planilha do Excel 2007", + "Excel 2007 spreadsheet template" : "Modelo de planilha do Excel 2007", + "Word 2007 document" : "Documento do Word 2007", + "Word 2007 document template" : "Modelo de documento do Word 2007", + "Microsoft Visio document" : "Documento do Microsoft Visio", + "WordPerfect document" : "Documento do WordPerfect", + "7-zip archive" : "Arquivo 7-zip", + "Blender scene" : "Cena do Blender", + "Bzip2 archive" : "Arquivo bzip2", + "Debian package" : "Pacote do Debian", + "FictionBook document" : "Documento do FictionBook", + "Unknown font" : "Fonte desconhecida", + "Krita document" : "Documento do Krita", + "Mobipocket e-book" : "Livro eletrônico Mobipocket", + "Windows Installer package" : "Pacote do Windows Installer", + "Perl script" : "Script Perl", + "PHP script" : "Script PHP", + "Tar archive" : "Arquivo tar", + "XML document" : "Documento XML", + "YAML document" : "Documento YAML", + "Zip archive" : "Arquivo zip", + "Zstandard archive" : "Arquivo zstandard", + "AAC audio" : "Áudio AAC", + "FLAC audio" : "Áudio FLAC", + "MPEG-4 audio" : "Áudio MPEG-4", + "MP3 audio" : "Áudio MP3", + "Ogg audio" : "Áudio ogg", + "RIFF/WAVe standard Audio" : "Áudio padrão RIFF/WAVe", + "WebM audio" : "Áudio WebM", + "MP3 ShoutCast playlist" : "Lista de reprodução do MP3 ShoutCast", + "Windows BMP image" : "Imagem BMP do Windows", + "Better Portable Graphics image" : "Imagem Better Portable Graphics", + "EMF image" : "Imagem EMF", + "GIF image" : "Imagem GIF", + "HEIC image" : "Imagem HEIC", + "HEIF image" : "Imagem HEIF", + "JPEG-2000 JP2 image" : "Imagem JPEG-2000 JP2", + "JPEG image" : "Imagem JPEG", "PNG image" : "Imagem PNG", + "SVG image" : "Imagem SVG", + "Truevision Targa image" : "Imagem Truevision Targa", + "TIFF image" : "Imagem TIFF", + "WebP image" : "Imagem WebP", + "Digital raw image" : "Imagem digital bruta", + "Windows Icon" : "Ícone do Windows", + "Email message" : "Mensagem de e-mail", + "VCS/ICS calendar" : "Calendário VCS/ICS", + "CSS stylesheet" : "Folha de estilo CSS", + "CSV document" : "Documento CSV", + "HTML document" : "Documento HTML", + "Markdown document" : "Documento Markdown", + "Plain text document" : "Documento de texto simples", + "Rich Text document" : "Documento Rich Text", + "Electronic business card" : "Cartão de visita eletrônico", + "C++ source code" : "Código-fonte C++", + "LDIF address book" : "Catálogo de endereços LDIF", + "NFO document" : "Documento NFO", + "PHP source" : "Código-fonte PHP", + "Python script" : "Script Python", + "ReStructuredText document" : "Documento ReStructuredText", + "3GPP multimedia file" : "Arquivo multimídia 3GPP", + "MPEG video" : "Vídeo MPEG", + "DV video" : "Vídeo DV", + "MPEG-2 transport stream" : "Fluxo de transporte MPEG-2", + "MPEG-4 video" : "Vídeo MPEG-4", + "Ogg video" : "Vídeo ogg", + "QuickTime video" : "Vídeo QuickTime", + "WebM video" : "Vídeo WebM", + "Flash video" : "Vídeo Flash", + "Matroska video" : "Vídeo Matroska", + "Windows Media video" : "Vídeo Windows Media", + "AVI video" : "Vídeo AVI", "Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor", "For more details see the {linkstart}documentation ↗{linkend}." : "Para obter mais detalhes, consulte a {linkstart}documentação ↗{linkend}.", "unknown text" : "texto desconhecido", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index a8bf2767a55..3b573b0a9d9 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -78,8 +78,124 @@ "%s (incompatible)" : "%s (incompatível)", "The following apps have been disabled: %s" : "Os seguintes aplicativos foram desativados: %s", "Already up to date" : "Já está atualizado", + "Windows Command Script" : "Script de Comando do Windows", + "Electronic book document" : "Documento de livro eletrônico", + "TrueType Font Collection" : "Coleção de Fontes TrueType", + "Web Open Font Format" : "Formato de Fonte Aberta da Web", + "GPX geographic data" : "Dados geográficos GPX", + "Gzip archive" : "Arquivo gzip", + "Adobe Illustrator document" : "Documento do Adobe Illustrator", + "Java source code" : "Código-fonte Java", + "JavaScript source code" : "Código-fonte JavaScript", + "JSON document" : "Documento JSON", + "Microsoft Access database" : "Banco de dados do Microsoft Access", + "Microsoft OneNote document" : "Documento do Microsoft OneNote", + "Microsoft Word document" : "Documento do Microsoft Word", "Unknown" : "Desconhecida", + "PDF document" : "Documento PDF", + "PostScript document" : "Documento PostScript", + "RSS summary" : "Resumo RSS", + "Android package" : "Pacote para Android", + "KML geographic data" : "Dados geográficos KML", + "KML geographic compressed data" : "Dados comprimidos geográficos KML", + "Lotus Word Pro document" : "Documento do Lotus Word Pro", + "Excel spreadsheet" : "Planilha do Excel", + "Excel add-in" : "Suplemento do Excel", + "Excel 2007 binary spreadsheet" : "Planilha binária do Excel 2007", + "Excel spreadsheet template" : "Modelo de planilha do Excel", + "Outlook Message" : "Mensagem do Outlook", + "PowerPoint presentation" : "Apresentação do PowerPoint", + "PowerPoint add-in" : "Suplemento do PowerPoint", + "PowerPoint presentation template" : "Modelo de apresentação do PowerPoint", + "Word document" : "Documento do Word", + "ODF formula" : "Fórmula ODF", + "ODG drawing" : "Desenho ODG", + "ODG drawing (Flat XML)" : "Desenho ODG (XML plano)", + "ODG template" : "Modelo ODG", + "ODP presentation" : "Apresentação ODP", + "ODP presentation (Flat XML)" : "Apresentação ODP (XML plano)", + "ODP template" : "Modelo ODP", + "ODS spreadsheet" : "Planilha ODS", + "ODS spreadsheet (Flat XML)" : "Planilha ODS (XML plano)", + "ODS template" : "Modelo ODS", + "ODT document" : "Documento ODT", + "ODT document (Flat XML)" : "Documento ODT (XML plano)", + "ODT template" : "Modelo ODT", + "PowerPoint 2007 presentation" : "Apresentação do Powerpoint 2007", + "PowerPoint 2007 show" : "Show do PowerPoint 2007", + "PowerPoint 2007 presentation template" : "Modelo de apresentação do PowerPoint 2007", + "Excel 2007 spreadsheet" : "Planilha do Excel 2007", + "Excel 2007 spreadsheet template" : "Modelo de planilha do Excel 2007", + "Word 2007 document" : "Documento do Word 2007", + "Word 2007 document template" : "Modelo de documento do Word 2007", + "Microsoft Visio document" : "Documento do Microsoft Visio", + "WordPerfect document" : "Documento do WordPerfect", + "7-zip archive" : "Arquivo 7-zip", + "Blender scene" : "Cena do Blender", + "Bzip2 archive" : "Arquivo bzip2", + "Debian package" : "Pacote do Debian", + "FictionBook document" : "Documento do FictionBook", + "Unknown font" : "Fonte desconhecida", + "Krita document" : "Documento do Krita", + "Mobipocket e-book" : "Livro eletrônico Mobipocket", + "Windows Installer package" : "Pacote do Windows Installer", + "Perl script" : "Script Perl", + "PHP script" : "Script PHP", + "Tar archive" : "Arquivo tar", + "XML document" : "Documento XML", + "YAML document" : "Documento YAML", + "Zip archive" : "Arquivo zip", + "Zstandard archive" : "Arquivo zstandard", + "AAC audio" : "Áudio AAC", + "FLAC audio" : "Áudio FLAC", + "MPEG-4 audio" : "Áudio MPEG-4", + "MP3 audio" : "Áudio MP3", + "Ogg audio" : "Áudio ogg", + "RIFF/WAVe standard Audio" : "Áudio padrão RIFF/WAVe", + "WebM audio" : "Áudio WebM", + "MP3 ShoutCast playlist" : "Lista de reprodução do MP3 ShoutCast", + "Windows BMP image" : "Imagem BMP do Windows", + "Better Portable Graphics image" : "Imagem Better Portable Graphics", + "EMF image" : "Imagem EMF", + "GIF image" : "Imagem GIF", + "HEIC image" : "Imagem HEIC", + "HEIF image" : "Imagem HEIF", + "JPEG-2000 JP2 image" : "Imagem JPEG-2000 JP2", + "JPEG image" : "Imagem JPEG", "PNG image" : "Imagem PNG", + "SVG image" : "Imagem SVG", + "Truevision Targa image" : "Imagem Truevision Targa", + "TIFF image" : "Imagem TIFF", + "WebP image" : "Imagem WebP", + "Digital raw image" : "Imagem digital bruta", + "Windows Icon" : "Ícone do Windows", + "Email message" : "Mensagem de e-mail", + "VCS/ICS calendar" : "Calendário VCS/ICS", + "CSS stylesheet" : "Folha de estilo CSS", + "CSV document" : "Documento CSV", + "HTML document" : "Documento HTML", + "Markdown document" : "Documento Markdown", + "Plain text document" : "Documento de texto simples", + "Rich Text document" : "Documento Rich Text", + "Electronic business card" : "Cartão de visita eletrônico", + "C++ source code" : "Código-fonte C++", + "LDIF address book" : "Catálogo de endereços LDIF", + "NFO document" : "Documento NFO", + "PHP source" : "Código-fonte PHP", + "Python script" : "Script Python", + "ReStructuredText document" : "Documento ReStructuredText", + "3GPP multimedia file" : "Arquivo multimídia 3GPP", + "MPEG video" : "Vídeo MPEG", + "DV video" : "Vídeo DV", + "MPEG-2 transport stream" : "Fluxo de transporte MPEG-2", + "MPEG-4 video" : "Vídeo MPEG-4", + "Ogg video" : "Vídeo ogg", + "QuickTime video" : "Vídeo QuickTime", + "WebM video" : "Vídeo WebM", + "Flash video" : "Vídeo Flash", + "Matroska video" : "Vídeo Matroska", + "Windows Media video" : "Vídeo Windows Media", + "AVI video" : "Vídeo AVI", "Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor", "For more details see the {linkstart}documentation ↗{linkend}." : "Para obter mais detalhes, consulte a {linkstart}documentação ↗{linkend}.", "unknown text" : "texto desconhecido", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index 16ce12acafd..9755d0fe1ae 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -17,7 +17,7 @@ OC.L10N.register( "No image or file provided" : "没有提供图片或文件", "Unknown filetype" : "未知的文件类型", "An error occurred. Please contact your admin." : "发生了错误,请联系管理员。", - "Invalid image" : "无效的图像", + "Invalid image" : "无效的图片", "No temporary profile picture available, try again" : "没有临时个人页图片可用,请重试", "No crop data provided" : "没有提供剪裁数据", "No valid crop data provided" : "没有提供有效的裁剪数据", @@ -47,8 +47,8 @@ OC.L10N.register( "Bad request" : "请求错误", "Requested task type does not exist" : "请求的任务类型不存在", "Necessary language model provider is not available" : "无必要的语言模型提供程序", - "No text to image provider is available" : "没有可用的文字转图像提供者", - "Image not found" : "未找到图像", + "No text to image provider is available" : "没有可用的文字转图片提供者", + "Image not found" : "未找到图片", "No translation provider available" : "没有可用的翻译提供程序", "Could not detect language" : "无法检测语言", "Unable to translate" : "无法翻译", @@ -80,8 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (不兼容)", "The following apps have been disabled: %s" : "以下应用已被禁用:%s", "Already up to date" : "已经是最新版本", + "Windows Command Script" : "Windows 命令脚本", + "Electronic book document" : "电子书文档", + "TrueType Font Collection" : "TrueType 字体集", + "Web Open Font Format" : "Web 开放字体格式", + "GPX geographic data" : "GPX 地理数据", + "Gzip archive" : "Gzip 归档文件", + "Adobe Illustrator document" : "Adobe Illustrator 文档", + "Java source code" : "Java 源代码", + "JavaScript source code" : "JavaScript 源代码", + "JSON document" : "JSON 文档", + "Microsoft Access database" : "Microsoft Access 数据库", + "Microsoft OneNote document" : "Microsoft OneNote 文档", + "Microsoft Word document" : "Microsoft Word 文档", "Unknown" : "未知", + "PDF document" : "PDF 文档", + "PostScript document" : "PostScript 文档", + "RSS summary" : "RSS 摘要", + "Android package" : "Android 软件包", + "KML geographic data" : "KML 地理数据", + "KML geographic compressed data" : "KML 地理压缩数据", + "Lotus Word Pro document" : "Lotus Word Pro document文档", + "Excel spreadsheet" : "Excel 电子表格", + "Excel add-in" : "Excel 插件", + "Excel 2007 binary spreadsheet" : "Excel 2007 二进制电子表格", + "Excel spreadsheet template" : "Excel 电子表格模板", + "Outlook Message" : "Outlook 邮件", + "PowerPoint presentation" : "PowerPoint 演示文稿", + "PowerPoint add-in" : "PowerPoint 插件", + "PowerPoint presentation template" : "PowerPoint 演示文稿模板", + "Word document" : "Word 文档", + "ODF formula" : "ODF 公式", + "ODG drawing" : "ODG 绘图", + "ODG drawing (Flat XML)" : "ODG 绘图(Flat XML)", + "ODG template" : "ODG 模板", + "ODP presentation" : "ODP 演示文稿", + "ODP presentation (Flat XML)" : "ODP 演示文稿(Flat XML)", + "ODP template" : "ODP 模板", + "ODS spreadsheet" : "ODS 电子表格", + "ODS spreadsheet (Flat XML)" : "ODS 电子表格(Flat XML)", + "ODS template" : "ODS 模板", + "ODT document" : "ODT 文档", + "ODT document (Flat XML)" : "ODT 文档(Flat XML)", + "ODT template" : "ODT 模板", + "PowerPoint 2007 presentation" : "PowerPoint 2007 演示文稿", + "PowerPoint 2007 show" : "PowerPoint 2007 放映", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 演示文稿模板", + "Excel 2007 spreadsheet" : "Excel 2007 电子表格", + "Excel 2007 spreadsheet template" : "Excel 2007 电子表格模板", + "Word 2007 document" : "Word 2007 文档", + "Word 2007 document template" : "Word 2007 文档模板", + "Microsoft Visio document" : "Microsoft Visio 文档", + "WordPerfect document" : "WordPerfect 文档", + "7-zip archive" : "7-zip 归档文件", + "Blender scene" : "Blender 场景", + "Bzip2 archive" : "Bzip2 归档文件", + "Debian package" : "Debian 软件包", + "FictionBook document" : "FictionBook 文档", + "Unknown font" : "未知字体", + "Krita document" : "Krita 文档", + "Mobipocket e-book" : "Mobipocket 电子书", + "Windows Installer package" : "Windows Installer 安装包", + "Perl script" : "Perl 脚本", + "PHP script" : "PHP 脚本", + "Tar archive" : "Tar 归档文件", + "XML document" : "XML 文档", + "YAML document" : "YAML 文档", + "Zip archive" : "Zip 归档文件", + "Zstandard archive" : "Zstandard 归档文件", + "AAC audio" : "AAC 音频", + "FLAC audio" : "FLAC 音频", + "MPEG-4 audio" : "MPEG-4 音频", + "MP3 audio" : "MP3 音频", + "Ogg audio" : "Ogg 音频", + "RIFF/WAVe standard Audio" : "RIFF/WAVe 标准音频", + "WebM audio" : "WebM 音频", + "MP3 ShoutCast playlist" : "MP3 ShoutCast 播放列表", + "Windows BMP image" : "Windows BMP 图片", + "Better Portable Graphics image" : "Better Portable Graphics 图片", + "EMF image" : "EMF 图片", + "GIF image" : "GIF 图片", + "HEIC image" : "HEIC 图片", + "HEIF image" : "HEIF 图片", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 图片", + "JPEG image" : "JPEG 图片", "PNG image" : "PNG 图片", + "SVG image" : "SVG 图片", + "Truevision Targa image" : "Truevision Targa 图片", + "TIFF image" : "TIFF 图片", + "WebP image" : "WebP 图片", + "Digital raw image" : "数字原始图像", + "Windows Icon" : "Windows 图标", + "Email message" : "电子邮件消息", + "VCS/ICS calendar" : "VCS/ICS 日历", + "CSS stylesheet" : "CSS 样式表", + "CSV document" : "CSV 文档", + "HTML document" : "HTML 文档", + "Markdown document" : "Markdown 文档", + "Org-mode file" : "Org-mode 文件", + "Plain text document" : "纯文本文档", + "Rich Text document" : "富文本文档", + "Electronic business card" : "电子名片", + "C++ source code" : "C++ 源代码", + "LDIF address book" : "LDIF 通讯录", + "NFO document" : "NFO 文档", + "PHP source" : "PHP 源代码", + "Python script" : "Python 脚本", + "ReStructuredText document" : "ReStructuredText 文档", + "3GPP multimedia file" : "3GPP 多媒体文件", + "MPEG video" : "MPEG 视频", + "DV video" : "DV 视频", + "MPEG-2 transport stream" : "MPEG-2 传输流", + "MPEG-4 video" : "MPEG-4 视频", + "Ogg video" : "Ogg 视频", + "QuickTime video" : "QuickTime 视频", + "WebM video" : "WebM 视频", + "Flash video" : "Flash 视频", + "Matroska video" : "Matroska 视频", + "Windows Media video" : "Windows 媒体视频", + "AVI video" : "AVI 视频", "Error occurred while checking server setup" : "检查服务器设置时出错", "For more details see the {linkstart}documentation ↗{linkend}." : "了解更多详情,请参见{linkstart}文档 ↗{linkend}。", "unknown text" : "未知文字", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index aba6c5c4c4a..6a2df414bae 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -15,7 +15,7 @@ "No image or file provided" : "没有提供图片或文件", "Unknown filetype" : "未知的文件类型", "An error occurred. Please contact your admin." : "发生了错误,请联系管理员。", - "Invalid image" : "无效的图像", + "Invalid image" : "无效的图片", "No temporary profile picture available, try again" : "没有临时个人页图片可用,请重试", "No crop data provided" : "没有提供剪裁数据", "No valid crop data provided" : "没有提供有效的裁剪数据", @@ -45,8 +45,8 @@ "Bad request" : "请求错误", "Requested task type does not exist" : "请求的任务类型不存在", "Necessary language model provider is not available" : "无必要的语言模型提供程序", - "No text to image provider is available" : "没有可用的文字转图像提供者", - "Image not found" : "未找到图像", + "No text to image provider is available" : "没有可用的文字转图片提供者", + "Image not found" : "未找到图片", "No translation provider available" : "没有可用的翻译提供程序", "Could not detect language" : "无法检测语言", "Unable to translate" : "无法翻译", @@ -78,8 +78,125 @@ "%s (incompatible)" : "%s (不兼容)", "The following apps have been disabled: %s" : "以下应用已被禁用:%s", "Already up to date" : "已经是最新版本", + "Windows Command Script" : "Windows 命令脚本", + "Electronic book document" : "电子书文档", + "TrueType Font Collection" : "TrueType 字体集", + "Web Open Font Format" : "Web 开放字体格式", + "GPX geographic data" : "GPX 地理数据", + "Gzip archive" : "Gzip 归档文件", + "Adobe Illustrator document" : "Adobe Illustrator 文档", + "Java source code" : "Java 源代码", + "JavaScript source code" : "JavaScript 源代码", + "JSON document" : "JSON 文档", + "Microsoft Access database" : "Microsoft Access 数据库", + "Microsoft OneNote document" : "Microsoft OneNote 文档", + "Microsoft Word document" : "Microsoft Word 文档", "Unknown" : "未知", + "PDF document" : "PDF 文档", + "PostScript document" : "PostScript 文档", + "RSS summary" : "RSS 摘要", + "Android package" : "Android 软件包", + "KML geographic data" : "KML 地理数据", + "KML geographic compressed data" : "KML 地理压缩数据", + "Lotus Word Pro document" : "Lotus Word Pro document文档", + "Excel spreadsheet" : "Excel 电子表格", + "Excel add-in" : "Excel 插件", + "Excel 2007 binary spreadsheet" : "Excel 2007 二进制电子表格", + "Excel spreadsheet template" : "Excel 电子表格模板", + "Outlook Message" : "Outlook 邮件", + "PowerPoint presentation" : "PowerPoint 演示文稿", + "PowerPoint add-in" : "PowerPoint 插件", + "PowerPoint presentation template" : "PowerPoint 演示文稿模板", + "Word document" : "Word 文档", + "ODF formula" : "ODF 公式", + "ODG drawing" : "ODG 绘图", + "ODG drawing (Flat XML)" : "ODG 绘图(Flat XML)", + "ODG template" : "ODG 模板", + "ODP presentation" : "ODP 演示文稿", + "ODP presentation (Flat XML)" : "ODP 演示文稿(Flat XML)", + "ODP template" : "ODP 模板", + "ODS spreadsheet" : "ODS 电子表格", + "ODS spreadsheet (Flat XML)" : "ODS 电子表格(Flat XML)", + "ODS template" : "ODS 模板", + "ODT document" : "ODT 文档", + "ODT document (Flat XML)" : "ODT 文档(Flat XML)", + "ODT template" : "ODT 模板", + "PowerPoint 2007 presentation" : "PowerPoint 2007 演示文稿", + "PowerPoint 2007 show" : "PowerPoint 2007 放映", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 演示文稿模板", + "Excel 2007 spreadsheet" : "Excel 2007 电子表格", + "Excel 2007 spreadsheet template" : "Excel 2007 电子表格模板", + "Word 2007 document" : "Word 2007 文档", + "Word 2007 document template" : "Word 2007 文档模板", + "Microsoft Visio document" : "Microsoft Visio 文档", + "WordPerfect document" : "WordPerfect 文档", + "7-zip archive" : "7-zip 归档文件", + "Blender scene" : "Blender 场景", + "Bzip2 archive" : "Bzip2 归档文件", + "Debian package" : "Debian 软件包", + "FictionBook document" : "FictionBook 文档", + "Unknown font" : "未知字体", + "Krita document" : "Krita 文档", + "Mobipocket e-book" : "Mobipocket 电子书", + "Windows Installer package" : "Windows Installer 安装包", + "Perl script" : "Perl 脚本", + "PHP script" : "PHP 脚本", + "Tar archive" : "Tar 归档文件", + "XML document" : "XML 文档", + "YAML document" : "YAML 文档", + "Zip archive" : "Zip 归档文件", + "Zstandard archive" : "Zstandard 归档文件", + "AAC audio" : "AAC 音频", + "FLAC audio" : "FLAC 音频", + "MPEG-4 audio" : "MPEG-4 音频", + "MP3 audio" : "MP3 音频", + "Ogg audio" : "Ogg 音频", + "RIFF/WAVe standard Audio" : "RIFF/WAVe 标准音频", + "WebM audio" : "WebM 音频", + "MP3 ShoutCast playlist" : "MP3 ShoutCast 播放列表", + "Windows BMP image" : "Windows BMP 图片", + "Better Portable Graphics image" : "Better Portable Graphics 图片", + "EMF image" : "EMF 图片", + "GIF image" : "GIF 图片", + "HEIC image" : "HEIC 图片", + "HEIF image" : "HEIF 图片", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 图片", + "JPEG image" : "JPEG 图片", "PNG image" : "PNG 图片", + "SVG image" : "SVG 图片", + "Truevision Targa image" : "Truevision Targa 图片", + "TIFF image" : "TIFF 图片", + "WebP image" : "WebP 图片", + "Digital raw image" : "数字原始图像", + "Windows Icon" : "Windows 图标", + "Email message" : "电子邮件消息", + "VCS/ICS calendar" : "VCS/ICS 日历", + "CSS stylesheet" : "CSS 样式表", + "CSV document" : "CSV 文档", + "HTML document" : "HTML 文档", + "Markdown document" : "Markdown 文档", + "Org-mode file" : "Org-mode 文件", + "Plain text document" : "纯文本文档", + "Rich Text document" : "富文本文档", + "Electronic business card" : "电子名片", + "C++ source code" : "C++ 源代码", + "LDIF address book" : "LDIF 通讯录", + "NFO document" : "NFO 文档", + "PHP source" : "PHP 源代码", + "Python script" : "Python 脚本", + "ReStructuredText document" : "ReStructuredText 文档", + "3GPP multimedia file" : "3GPP 多媒体文件", + "MPEG video" : "MPEG 视频", + "DV video" : "DV 视频", + "MPEG-2 transport stream" : "MPEG-2 传输流", + "MPEG-4 video" : "MPEG-4 视频", + "Ogg video" : "Ogg 视频", + "QuickTime video" : "QuickTime 视频", + "WebM video" : "WebM 视频", + "Flash video" : "Flash 视频", + "Matroska video" : "Matroska 视频", + "Windows Media video" : "Windows 媒体视频", + "AVI video" : "AVI 视频", "Error occurred while checking server setup" : "检查服务器设置时出错", "For more details see the {linkstart}documentation ↗{linkend}." : "了解更多详情,请参见{linkstart}文档 ↗{linkend}。", "unknown text" : "未知文字", diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js index 065842d3ef7..f99baec22e3 100644 --- a/core/l10n/zh_HK.js +++ b/core/l10n/zh_HK.js @@ -80,7 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s (不相容)", "The following apps have been disabled: %s" : "以下應用程式已經被停用:%s", "Already up to date" : "此版本為最新版本", + "Windows Command Script" : "Windows 命令腳本", + "Electronic book document" : "電子書文件", + "TrueType Font Collection" : "TrueType 字體集", + "Web Open Font Format" : "網絡開放字體格式", + "GPX geographic data" : "GPX 地理數據", + "Gzip archive" : "Gzip 封存檔", + "Adobe Illustrator document" : "Adobe Illustrator 文件", + "Java source code" : "Java 源碼", + "JavaScript source code" : "JavaScript 源碼", + "JSON document" : "JSON 文件", + "Microsoft Access database" : "Microsoft Access 數據庫", + "Microsoft OneNote document" : "Microsoft OneNote 文件", + "Microsoft Word document" : "Microsoft Word 文件", "Unknown" : "不詳", + "PDF document" : "PDF 文件", + "PostScript document" : "PostScript 文件", + "RSS summary" : "RSS 摘要", + "Android package" : "Android 軟體包", + "KML geographic data" : "KML 地理數據", + "KML geographic compressed data" : "KML 壓縮地理數據", + "Lotus Word Pro document" : "Lotus Word Pro 文件", + "Excel spreadsheet" : "Excel 試算表", + "Excel add-in" : "Excel 附加元件", + "Excel 2007 binary spreadsheet" : "Excel 2007 二進制試算表", + "Excel spreadsheet template" : "Excel 試算表模板", + "Outlook Message" : "Outlook 郵件", + "PowerPoint presentation" : "PowerPoint 演示文稿", + "PowerPoint add-in" : "PowerPoint 附加元件", + "PowerPoint presentation template" : "PowerPoint 演示文稿模板", + "Word document" : "Word 文件", + "ODF formula" : "ODF 公式", + "ODG drawing" : "ODG 繪圖", + "ODG drawing (Flat XML)" : "ODG 繪圖(扁平 XML)", + "ODG template" : "ODG 模板", + "ODP presentation" : "ODP 演示文稿", + "ODP presentation (Flat XML)" : "ODP 演示文稿(扁平 XML)", + "ODP template" : "ODP 模板", + "ODS spreadsheet" : "ODS 試算表", + "ODS spreadsheet (Flat XML)" : "ODS 試算表(扁平 XML)", + "ODS template" : "ODS 模板", + "ODT document" : "ODT 文件", + "ODT document (Flat XML)" : "ODT 文件(扁平 XML)", + "ODT template" : "ODT 模板", + "PowerPoint 2007 presentation" : "PowerPoint 2007 演示文稿", + "PowerPoint 2007 show" : "PowerPoint 2007 放映", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 演示文稿模板", + "Excel 2007 spreadsheet" : "Excel 2007 試算表", + "Excel 2007 spreadsheet template" : "Excel 2007 試算表模板", + "Word 2007 document" : "Word 2007 文件", + "Word 2007 document template" : "Word 2007 文件模板", + "Microsoft Visio document" : "Microsoft Visio 文件", + "WordPerfect document" : "WordPerfect 文件", + "7-zip archive" : "7-zip 壓縮檔", + "Blender scene" : "Blender 場景", + "Bzip2 archive" : "Bzip2 壓縮檔", + "Debian package" : "Debian 包", + "FictionBook document" : "FictionBook 文件", + "Unknown font" : "未知字體", + "Krita document" : "Krita 文件", + "Mobipocket e-book" : "Mobipocket 電子書", + "Windows Installer package" : "Windows 安裝包", + "Perl script" : "Perl 腳本", + "PHP script" : "PHP 腳本", + "Tar archive" : "Tar 壓縮檔", + "XML document" : "XML 文件", + "YAML document" : "YAML 文件", + "Zip archive" : "Zip 封存檔", + "Zstandard archive" : "Zstandard 封存檔", + "AAC audio" : "AAC 音頻", + "FLAC audio" : "FLAC 音頻", + "MPEG-4 audio" : "MPEG-4 音頻", + "MP3 audio" : "MP3 音頻", + "Ogg audio" : "Ogg 音頻", + "RIFF/WAVe standard Audio" : "RIFF/WAV 標準音頻", + "WebM audio" : "WebM 音頻", + "MP3 ShoutCast playlist" : "MP3 ShoutCast 播放列表", + "Windows BMP image" : "Windows BMP 圖像", + "Better Portable Graphics image" : "Better Portable Graphics 圖像", + "EMF image" : "EMF 圖像", + "GIF image" : "GIF 圖像", + "HEIC image" : "HEIC 圖像", + "HEIF image" : "HEIF 圖像", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 圖像", + "JPEG image" : "JPEG 圖像", + "PNG image" : "PNG 圖像", + "SVG image" : "SVG 圖像", + "Truevision Targa image" : "Truevision Targa 圖像", + "TIFF image" : "TIFF 圖像", + "WebP image" : "WebP 圖像", + "Digital raw image" : "數碼原始圖像", + "Windows Icon" : "Windows 圖標", + "Email message" : "電子郵件消息", + "VCS/ICS calendar" : "VCS/ICS 日曆", + "CSS stylesheet" : "CSS 樣式表", + "CSV document" : "CSV 文件", + "HTML document" : "HTML 文件", + "Markdown document" : "Markdown 文件", + "Org-mode file" : "Org-mode 文件", + "Plain text document" : "純文本文件", + "Rich Text document" : "富文本文件", + "Electronic business card" : "電子名片", + "C++ source code" : "C++ 源碼", + "LDIF address book" : "LDIF 通訊錄", + "NFO document" : "NFO 文件", + "PHP source" : "PHP 源碼", + "Python script" : "Python 腳本", + "ReStructuredText document" : "ReStructuredText 文件", + "3GPP multimedia file" : "3GPP 多媒體文件", + "MPEG video" : "MPEG 視頻", + "DV video" : "DV 視頻", + "MPEG-2 transport stream" : "MPEG-2 傳輸流", + "MPEG-4 video" : "MPEG-4 視頻", + "Ogg video" : "Ogg 視頻", + "QuickTime video" : "QuickTime 視頻", + "WebM video" : "WebM 視頻", + "Flash video" : "Flash 視頻", + "Matroska video" : "Matroska 視頻", + "Windows Media video" : "Windows Media 視頻", + "AVI video" : "AVI 視頻", "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "For more details see the {linkstart}documentation ↗{linkend}." : "有關更多細節,請參見 {linkstart} 說明書↗{linkend}。", "unknown text" : "文字不詳", diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json index 284102a1270..5ade206118c 100644 --- a/core/l10n/zh_HK.json +++ b/core/l10n/zh_HK.json @@ -78,7 +78,125 @@ "%s (incompatible)" : "%s (不相容)", "The following apps have been disabled: %s" : "以下應用程式已經被停用:%s", "Already up to date" : "此版本為最新版本", + "Windows Command Script" : "Windows 命令腳本", + "Electronic book document" : "電子書文件", + "TrueType Font Collection" : "TrueType 字體集", + "Web Open Font Format" : "網絡開放字體格式", + "GPX geographic data" : "GPX 地理數據", + "Gzip archive" : "Gzip 封存檔", + "Adobe Illustrator document" : "Adobe Illustrator 文件", + "Java source code" : "Java 源碼", + "JavaScript source code" : "JavaScript 源碼", + "JSON document" : "JSON 文件", + "Microsoft Access database" : "Microsoft Access 數據庫", + "Microsoft OneNote document" : "Microsoft OneNote 文件", + "Microsoft Word document" : "Microsoft Word 文件", "Unknown" : "不詳", + "PDF document" : "PDF 文件", + "PostScript document" : "PostScript 文件", + "RSS summary" : "RSS 摘要", + "Android package" : "Android 軟體包", + "KML geographic data" : "KML 地理數據", + "KML geographic compressed data" : "KML 壓縮地理數據", + "Lotus Word Pro document" : "Lotus Word Pro 文件", + "Excel spreadsheet" : "Excel 試算表", + "Excel add-in" : "Excel 附加元件", + "Excel 2007 binary spreadsheet" : "Excel 2007 二進制試算表", + "Excel spreadsheet template" : "Excel 試算表模板", + "Outlook Message" : "Outlook 郵件", + "PowerPoint presentation" : "PowerPoint 演示文稿", + "PowerPoint add-in" : "PowerPoint 附加元件", + "PowerPoint presentation template" : "PowerPoint 演示文稿模板", + "Word document" : "Word 文件", + "ODF formula" : "ODF 公式", + "ODG drawing" : "ODG 繪圖", + "ODG drawing (Flat XML)" : "ODG 繪圖(扁平 XML)", + "ODG template" : "ODG 模板", + "ODP presentation" : "ODP 演示文稿", + "ODP presentation (Flat XML)" : "ODP 演示文稿(扁平 XML)", + "ODP template" : "ODP 模板", + "ODS spreadsheet" : "ODS 試算表", + "ODS spreadsheet (Flat XML)" : "ODS 試算表(扁平 XML)", + "ODS template" : "ODS 模板", + "ODT document" : "ODT 文件", + "ODT document (Flat XML)" : "ODT 文件(扁平 XML)", + "ODT template" : "ODT 模板", + "PowerPoint 2007 presentation" : "PowerPoint 2007 演示文稿", + "PowerPoint 2007 show" : "PowerPoint 2007 放映", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 演示文稿模板", + "Excel 2007 spreadsheet" : "Excel 2007 試算表", + "Excel 2007 spreadsheet template" : "Excel 2007 試算表模板", + "Word 2007 document" : "Word 2007 文件", + "Word 2007 document template" : "Word 2007 文件模板", + "Microsoft Visio document" : "Microsoft Visio 文件", + "WordPerfect document" : "WordPerfect 文件", + "7-zip archive" : "7-zip 壓縮檔", + "Blender scene" : "Blender 場景", + "Bzip2 archive" : "Bzip2 壓縮檔", + "Debian package" : "Debian 包", + "FictionBook document" : "FictionBook 文件", + "Unknown font" : "未知字體", + "Krita document" : "Krita 文件", + "Mobipocket e-book" : "Mobipocket 電子書", + "Windows Installer package" : "Windows 安裝包", + "Perl script" : "Perl 腳本", + "PHP script" : "PHP 腳本", + "Tar archive" : "Tar 壓縮檔", + "XML document" : "XML 文件", + "YAML document" : "YAML 文件", + "Zip archive" : "Zip 封存檔", + "Zstandard archive" : "Zstandard 封存檔", + "AAC audio" : "AAC 音頻", + "FLAC audio" : "FLAC 音頻", + "MPEG-4 audio" : "MPEG-4 音頻", + "MP3 audio" : "MP3 音頻", + "Ogg audio" : "Ogg 音頻", + "RIFF/WAVe standard Audio" : "RIFF/WAV 標準音頻", + "WebM audio" : "WebM 音頻", + "MP3 ShoutCast playlist" : "MP3 ShoutCast 播放列表", + "Windows BMP image" : "Windows BMP 圖像", + "Better Portable Graphics image" : "Better Portable Graphics 圖像", + "EMF image" : "EMF 圖像", + "GIF image" : "GIF 圖像", + "HEIC image" : "HEIC 圖像", + "HEIF image" : "HEIF 圖像", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 圖像", + "JPEG image" : "JPEG 圖像", + "PNG image" : "PNG 圖像", + "SVG image" : "SVG 圖像", + "Truevision Targa image" : "Truevision Targa 圖像", + "TIFF image" : "TIFF 圖像", + "WebP image" : "WebP 圖像", + "Digital raw image" : "數碼原始圖像", + "Windows Icon" : "Windows 圖標", + "Email message" : "電子郵件消息", + "VCS/ICS calendar" : "VCS/ICS 日曆", + "CSS stylesheet" : "CSS 樣式表", + "CSV document" : "CSV 文件", + "HTML document" : "HTML 文件", + "Markdown document" : "Markdown 文件", + "Org-mode file" : "Org-mode 文件", + "Plain text document" : "純文本文件", + "Rich Text document" : "富文本文件", + "Electronic business card" : "電子名片", + "C++ source code" : "C++ 源碼", + "LDIF address book" : "LDIF 通訊錄", + "NFO document" : "NFO 文件", + "PHP source" : "PHP 源碼", + "Python script" : "Python 腳本", + "ReStructuredText document" : "ReStructuredText 文件", + "3GPP multimedia file" : "3GPP 多媒體文件", + "MPEG video" : "MPEG 視頻", + "DV video" : "DV 視頻", + "MPEG-2 transport stream" : "MPEG-2 傳輸流", + "MPEG-4 video" : "MPEG-4 視頻", + "Ogg video" : "Ogg 視頻", + "QuickTime video" : "QuickTime 視頻", + "WebM video" : "WebM 視頻", + "Flash video" : "Flash 視頻", + "Matroska video" : "Matroska 視頻", + "Windows Media video" : "Windows Media 視頻", + "AVI video" : "AVI 視頻", "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "For more details see the {linkstart}documentation ↗{linkend}." : "有關更多細節,請參見 {linkstart} 說明書↗{linkend}。", "unknown text" : "文字不詳", diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index ebdf0f011f0..ae5eb155760 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -80,8 +80,125 @@ OC.L10N.register( "%s (incompatible)" : "%s(不相容)", "The following apps have been disabled: %s" : "以下應用程式已被停用:%s", "Already up to date" : "已是最新版本", + "Windows Command Script" : "Windows 命令稿", + "Electronic book document" : "電子書文件", + "TrueType Font Collection" : "TrueType 字型集合", + "Web Open Font Format" : "Web 開放字型格式", + "GPX geographic data" : "GPX 地理資料", + "Gzip archive" : "Gzip 封存檔", + "Adobe Illustrator document" : "Adobe Illustrator 文件", + "Java source code" : "Java 原始碼", + "JavaScript source code" : "JavaScript 原始碼", + "JSON document" : "JSON 文件", + "Microsoft Access database" : "Microsoft Access 資料庫", + "Microsoft OneNote document" : "Microsoft OneNote 文件", + "Microsoft Word document" : "Microsoft Word 文件", "Unknown" : "未知", + "PDF document" : "PDF 文件", + "PostScript document" : "PostScript 文件", + "RSS summary" : "RSS 摘要", + "Android package" : "Android 軟體包", + "KML geographic data" : "KML 地理資料", + "KML geographic compressed data" : "KML 地理壓縮資料", + "Lotus Word Pro document" : "Lotus Word Pro 文件", + "Excel spreadsheet" : "Excel 試算表", + "Excel add-in" : "Excel 增益集", + "Excel 2007 binary spreadsheet" : "Excel 2007 二進位試算表", + "Excel spreadsheet template" : "Excel 試算表範本", + "Outlook Message" : "Outlook 訊息", + "PowerPoint presentation" : "PowerPoint 簡報", + "PowerPoint add-in" : "PowerPoint 增益集", + "PowerPoint presentation template" : "PowerPoint 簡報範本", + "Word document" : "Word 文件", + "ODF formula" : "ODF 公式", + "ODG drawing" : "ODG 繪圖", + "ODG drawing (Flat XML)" : "ODG 繪圖 (Flat XML)", + "ODG template" : "ODG 範本", + "ODP presentation" : "ODP 簡報", + "ODP presentation (Flat XML)" : "ODP 簡報 (Flat XML)", + "ODP template" : "ODP 範本", + "ODS spreadsheet" : "ODS 試算表", + "ODS spreadsheet (Flat XML)" : "ODS 試算表 (Flat XML)", + "ODS template" : "ODS 範本", + "ODT document" : "ODT 文件", + "ODT document (Flat XML)" : "ODT 文件 (Flat XML)", + "ODT template" : "ODT 範本", + "PowerPoint 2007 presentation" : "PowerPoint 2007 簡報", + "PowerPoint 2007 show" : "PowerPoint 2007 自動放映", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 簡報範本", + "Excel 2007 spreadsheet" : "Excel 2007 試算表", + "Excel 2007 spreadsheet template" : "Excel 2007 試算表範本", + "Word 2007 document" : "Word 2007 文件", + "Word 2007 document template" : "Word 2007 文件範本", + "Microsoft Visio document" : "Microsoft Visio 文件", + "WordPerfect document" : "WordPerfect 文件", + "7-zip archive" : "7-zip 封存檔", + "Blender scene" : "Blender 場景", + "Bzip2 archive" : "Bzip2 封存檔", + "Debian package" : "Debian 軟體包", + "FictionBook document" : "FictionBook 文件", + "Unknown font" : "未知字型", + "Krita document" : "Krita 文件", + "Mobipocket e-book" : "Mobipocket 電子書", + "Windows Installer package" : "Windows 安裝程式包", + "Perl script" : "Perl 命令稿", + "PHP script" : "PHP 命令稿", + "Tar archive" : "Tar 封存檔", + "XML document" : "XML 文件", + "YAML document" : "YAML 文件", + "Zip archive" : "Zip 封存檔", + "Zstandard archive" : "Zstandard 封存檔", + "AAC audio" : "AAC 音訊", + "FLAC audio" : "FLAC 音訊", + "MPEG-4 audio" : "MPEG-4 音訊", + "MP3 audio" : "MP3 音訊", + "Ogg audio" : "Ogg 音訊", + "RIFF/WAVe standard Audio" : "RIFF/WAVe 標準音訊", + "WebM audio" : "WebM 音訊", + "MP3 ShoutCast playlist" : "MP3 ShoutCast 播放清單", + "Windows BMP image" : "Windows BMP 影像", + "Better Portable Graphics image" : "BPG 影像", + "EMF image" : "EMF 影像", + "GIF image" : "GIF 影像", + "HEIC image" : "HEIC 影像", + "HEIF image" : "HEIF 影像", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 影像", + "JPEG image" : "JPEG 影像", "PNG image" : "PNG 圖檔", + "SVG image" : "SVG 影像", + "Truevision Targa image" : "Truevision Targa 影像", + "TIFF image" : "TIFF 影像", + "WebP image" : "WebP 影像", + "Digital raw image" : "數位原始影像", + "Windows Icon" : "Windows 圖示", + "Email message" : "電子郵件訊息", + "VCS/ICS calendar" : "VCS/ICS 行事曆", + "CSS stylesheet" : "CSS 樣式表", + "CSV document" : "CSV 文件", + "HTML document" : "HTML 文件", + "Markdown document" : "Markdown 文件", + "Org-mode file" : "Org-mode 檔案", + "Plain text document" : "純文字文件", + "Rich Text document" : "RTF 文件", + "Electronic business card" : "電子名片", + "C++ source code" : "C++ 原始碼", + "LDIF address book" : "LDIF 通訊錄", + "NFO document" : "NFO 文件", + "PHP source" : "PHP 原始碼", + "Python script" : "Python 命令稿", + "ReStructuredText document" : "ReStructuredText 文件", + "3GPP multimedia file" : "3GPP 多媒體檔案", + "MPEG video" : "MPEG 視訊", + "DV video" : "DV 視訊", + "MPEG-2 transport stream" : "MPEG2 傳輸串流", + "MPEG-4 video" : "MPEG-4 視訊", + "Ogg video" : "Ogg 視訊", + "QuickTime video" : "QuickTime 視訊", + "WebM video" : "WebM 視訊", + "Flash video" : "Flash 視訊", + "Matroska video" : "Matroska 視訊", + "Windows Media video" : "Windows 媒體視訊", + "AVI video" : "AVI 視訊", "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "For more details see the {linkstart}documentation ↗{linkend}." : "詳細資訊請參閱 {linkstart} 文件 ↗{linkend}。", "unknown text" : "未知的文字", diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index 269980d9d82..186b88ad878 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -78,8 +78,125 @@ "%s (incompatible)" : "%s(不相容)", "The following apps have been disabled: %s" : "以下應用程式已被停用:%s", "Already up to date" : "已是最新版本", + "Windows Command Script" : "Windows 命令稿", + "Electronic book document" : "電子書文件", + "TrueType Font Collection" : "TrueType 字型集合", + "Web Open Font Format" : "Web 開放字型格式", + "GPX geographic data" : "GPX 地理資料", + "Gzip archive" : "Gzip 封存檔", + "Adobe Illustrator document" : "Adobe Illustrator 文件", + "Java source code" : "Java 原始碼", + "JavaScript source code" : "JavaScript 原始碼", + "JSON document" : "JSON 文件", + "Microsoft Access database" : "Microsoft Access 資料庫", + "Microsoft OneNote document" : "Microsoft OneNote 文件", + "Microsoft Word document" : "Microsoft Word 文件", "Unknown" : "未知", + "PDF document" : "PDF 文件", + "PostScript document" : "PostScript 文件", + "RSS summary" : "RSS 摘要", + "Android package" : "Android 軟體包", + "KML geographic data" : "KML 地理資料", + "KML geographic compressed data" : "KML 地理壓縮資料", + "Lotus Word Pro document" : "Lotus Word Pro 文件", + "Excel spreadsheet" : "Excel 試算表", + "Excel add-in" : "Excel 增益集", + "Excel 2007 binary spreadsheet" : "Excel 2007 二進位試算表", + "Excel spreadsheet template" : "Excel 試算表範本", + "Outlook Message" : "Outlook 訊息", + "PowerPoint presentation" : "PowerPoint 簡報", + "PowerPoint add-in" : "PowerPoint 增益集", + "PowerPoint presentation template" : "PowerPoint 簡報範本", + "Word document" : "Word 文件", + "ODF formula" : "ODF 公式", + "ODG drawing" : "ODG 繪圖", + "ODG drawing (Flat XML)" : "ODG 繪圖 (Flat XML)", + "ODG template" : "ODG 範本", + "ODP presentation" : "ODP 簡報", + "ODP presentation (Flat XML)" : "ODP 簡報 (Flat XML)", + "ODP template" : "ODP 範本", + "ODS spreadsheet" : "ODS 試算表", + "ODS spreadsheet (Flat XML)" : "ODS 試算表 (Flat XML)", + "ODS template" : "ODS 範本", + "ODT document" : "ODT 文件", + "ODT document (Flat XML)" : "ODT 文件 (Flat XML)", + "ODT template" : "ODT 範本", + "PowerPoint 2007 presentation" : "PowerPoint 2007 簡報", + "PowerPoint 2007 show" : "PowerPoint 2007 自動放映", + "PowerPoint 2007 presentation template" : "PowerPoint 2007 簡報範本", + "Excel 2007 spreadsheet" : "Excel 2007 試算表", + "Excel 2007 spreadsheet template" : "Excel 2007 試算表範本", + "Word 2007 document" : "Word 2007 文件", + "Word 2007 document template" : "Word 2007 文件範本", + "Microsoft Visio document" : "Microsoft Visio 文件", + "WordPerfect document" : "WordPerfect 文件", + "7-zip archive" : "7-zip 封存檔", + "Blender scene" : "Blender 場景", + "Bzip2 archive" : "Bzip2 封存檔", + "Debian package" : "Debian 軟體包", + "FictionBook document" : "FictionBook 文件", + "Unknown font" : "未知字型", + "Krita document" : "Krita 文件", + "Mobipocket e-book" : "Mobipocket 電子書", + "Windows Installer package" : "Windows 安裝程式包", + "Perl script" : "Perl 命令稿", + "PHP script" : "PHP 命令稿", + "Tar archive" : "Tar 封存檔", + "XML document" : "XML 文件", + "YAML document" : "YAML 文件", + "Zip archive" : "Zip 封存檔", + "Zstandard archive" : "Zstandard 封存檔", + "AAC audio" : "AAC 音訊", + "FLAC audio" : "FLAC 音訊", + "MPEG-4 audio" : "MPEG-4 音訊", + "MP3 audio" : "MP3 音訊", + "Ogg audio" : "Ogg 音訊", + "RIFF/WAVe standard Audio" : "RIFF/WAVe 標準音訊", + "WebM audio" : "WebM 音訊", + "MP3 ShoutCast playlist" : "MP3 ShoutCast 播放清單", + "Windows BMP image" : "Windows BMP 影像", + "Better Portable Graphics image" : "BPG 影像", + "EMF image" : "EMF 影像", + "GIF image" : "GIF 影像", + "HEIC image" : "HEIC 影像", + "HEIF image" : "HEIF 影像", + "JPEG-2000 JP2 image" : "JPEG-2000 JP2 影像", + "JPEG image" : "JPEG 影像", "PNG image" : "PNG 圖檔", + "SVG image" : "SVG 影像", + "Truevision Targa image" : "Truevision Targa 影像", + "TIFF image" : "TIFF 影像", + "WebP image" : "WebP 影像", + "Digital raw image" : "數位原始影像", + "Windows Icon" : "Windows 圖示", + "Email message" : "電子郵件訊息", + "VCS/ICS calendar" : "VCS/ICS 行事曆", + "CSS stylesheet" : "CSS 樣式表", + "CSV document" : "CSV 文件", + "HTML document" : "HTML 文件", + "Markdown document" : "Markdown 文件", + "Org-mode file" : "Org-mode 檔案", + "Plain text document" : "純文字文件", + "Rich Text document" : "RTF 文件", + "Electronic business card" : "電子名片", + "C++ source code" : "C++ 原始碼", + "LDIF address book" : "LDIF 通訊錄", + "NFO document" : "NFO 文件", + "PHP source" : "PHP 原始碼", + "Python script" : "Python 命令稿", + "ReStructuredText document" : "ReStructuredText 文件", + "3GPP multimedia file" : "3GPP 多媒體檔案", + "MPEG video" : "MPEG 視訊", + "DV video" : "DV 視訊", + "MPEG-2 transport stream" : "MPEG2 傳輸串流", + "MPEG-4 video" : "MPEG-4 視訊", + "Ogg video" : "Ogg 視訊", + "QuickTime video" : "QuickTime 視訊", + "WebM video" : "WebM 視訊", + "Flash video" : "Flash 視訊", + "Matroska video" : "Matroska 視訊", + "Windows Media video" : "Windows 媒體視訊", + "AVI video" : "AVI 視訊", "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "For more details see the {linkstart}documentation ↗{linkend}." : "詳細資訊請參閱 {linkstart} 文件 ↗{linkend}。", "unknown text" : "未知的文字", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index cc9d43282cd..1ee2979a38e 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -93,6 +93,8 @@ OC.L10N.register( "Destination does not exist" : "La destination n'existe pas", "Destination is not creatable" : "La destination ne peut pas être créée", "Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point", + "%1$s (renamed)" : "%1$s (renommé)", + "renamed file" : "fichier renommé", "\"%1$s\" is a forbidden file or folder name." : "\"%1$s\" est un nom de fichier ou de dossier interdit.", "\"%1$s\" is a forbidden prefix for file or folder names." : "\"%1$s\" est un préfixe interdit pour les noms de fichiers ou de dossiers.", "\"%1$s\" is not allowed inside a file or folder name." : "\"%1$s\" n'est pas autorisé dans un nom de fichier ou de dossier.", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index 83615416df1..45b15c0d2eb 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -91,6 +91,8 @@ "Destination does not exist" : "La destination n'existe pas", "Destination is not creatable" : "La destination ne peut pas être créée", "Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point", + "%1$s (renamed)" : "%1$s (renommé)", + "renamed file" : "fichier renommé", "\"%1$s\" is a forbidden file or folder name." : "\"%1$s\" est un nom de fichier ou de dossier interdit.", "\"%1$s\" is a forbidden prefix for file or folder names." : "\"%1$s\" est un préfixe interdit pour les noms de fichiers ou de dossiers.", "\"%1$s\" is not allowed inside a file or folder name." : "\"%1$s\" n'est pas autorisé dans un nom de fichier ou de dossier.", diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js index 820aec1a2ba..06aad919ff3 100644 --- a/lib/l10n/ja.js +++ b/lib/l10n/ja.js @@ -93,6 +93,8 @@ OC.L10N.register( "Destination does not exist" : "宛先が存在しません", "Destination is not creatable" : "宛先は作成できません", "Dot files are not allowed" : "隠しファイルは許可されていません", + "%1$s (renamed)" : "%1$s (リネーム済み)", + "renamed file" : "リネーム済みファイル", "\"%1$s\" is a forbidden file or folder name." : "\"%1$s\"は禁止されているファイル名またはフォルダー名です。", "\"%1$s\" is a forbidden prefix for file or folder names." : "\"%1$s\"は、ファイル名やフォルダー名には使用できない接頭辞です。", "\"%1$s\" is not allowed inside a file or folder name." : "\"%1$s\"はファイル名やフォルダー名の中に入れることはできません。", diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json index 04f6e2ee13d..f0328f6d484 100644 --- a/lib/l10n/ja.json +++ b/lib/l10n/ja.json @@ -91,6 +91,8 @@ "Destination does not exist" : "宛先が存在しません", "Destination is not creatable" : "宛先は作成できません", "Dot files are not allowed" : "隠しファイルは許可されていません", + "%1$s (renamed)" : "%1$s (リネーム済み)", + "renamed file" : "リネーム済みファイル", "\"%1$s\" is a forbidden file or folder name." : "\"%1$s\"は禁止されているファイル名またはフォルダー名です。", "\"%1$s\" is a forbidden prefix for file or folder names." : "\"%1$s\"は、ファイル名やフォルダー名には使用できない接頭辞です。", "\"%1$s\" is not allowed inside a file or folder name." : "\"%1$s\"はファイル名やフォルダー名の中に入れることはできません。", diff --git a/lib/private/Files/Storage/Common.php b/lib/private/Files/Storage/Common.php index ca0e38774c8..b1e02cf2e6c 100644 --- a/lib/private/Files/Storage/Common.php +++ b/lib/private/Files/Storage/Common.php @@ -19,6 +19,7 @@ use OC\Files\ObjectStore\ObjectStoreStorage; use OC\Files\Storage\Wrapper\Encryption; use OC\Files\Storage\Wrapper\Jail; use OC\Files\Storage\Wrapper\Wrapper; +use OCP\Files; use OCP\Files\Cache\ICache; use OCP\Files\Cache\IPropagator; use OCP\Files\Cache\IScanner; @@ -205,7 +206,7 @@ abstract class Common implements Storage, ILockingStorage, IWriteStreamStorage, } else { $sourceStream = $this->fopen($source, 'r'); $targetStream = $this->fopen($target, 'w'); - [, $result] = \OC_Helper::streamCopy($sourceStream, $targetStream); + [, $result] = Files::streamCopy($sourceStream, $targetStream, true); if (!$result) { Server::get(LoggerInterface::class)->warning("Failed to write data while copying $source to $target"); } @@ -734,7 +735,7 @@ abstract class Common implements Storage, ILockingStorage, IWriteStreamStorage, throw new GenericFileException("Failed to open $path for writing"); } try { - [$count, $result] = \OC_Helper::streamCopy($stream, $target); + [$count, $result] = Files::streamCopy($stream, $target, true); if (!$result) { throw new GenericFileException('Failed to copy stream'); } diff --git a/lib/private/Files/Storage/LocalTempFileTrait.php b/lib/private/Files/Storage/LocalTempFileTrait.php index c8e3588f2e8..fffc3e789f3 100644 --- a/lib/private/Files/Storage/LocalTempFileTrait.php +++ b/lib/private/Files/Storage/LocalTempFileTrait.php @@ -7,6 +7,8 @@ */ namespace OC\Files\Storage; +use OCP\Files; + /** * Storage backend class for providing common filesystem operation methods * which are not storage-backend specific. @@ -45,7 +47,7 @@ trait LocalTempFileTrait { } $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($extension); $target = fopen($tmpFile, 'w'); - \OC_Helper::streamCopy($source, $target); + Files::streamCopy($source, $target); fclose($target); return $tmpFile; } diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php index f4ab4754cff..4d38d2d37aa 100644 --- a/lib/private/Files/Storage/Wrapper/Encryption.php +++ b/lib/private/Files/Storage/Wrapper/Encryption.php @@ -21,6 +21,7 @@ use OCP\Encryption\Exceptions\InvalidHeaderException; use OCP\Encryption\IFile; use OCP\Encryption\IManager; use OCP\Encryption\Keys\IStorage; +use OCP\Files; use OCP\Files\Cache\ICacheEntry; use OCP\Files\Mount\IMountPoint; use OCP\Files\Storage; @@ -684,7 +685,7 @@ class Encryption extends Wrapper { try { $source = $sourceStorage->fopen($sourceInternalPath, 'r'); $target = $this->fopen($targetInternalPath, 'w'); - [, $result] = \OC_Helper::streamCopy($source, $target); + [, $result] = Files::streamCopy($source, $target, true); } finally { if (is_resource($source)) { fclose($source); @@ -893,7 +894,7 @@ class Encryption extends Wrapper { public function writeStream(string $path, $stream, ?int $size = null): int { // always fall back to fopen $target = $this->fopen($path, 'w'); - [$count, $result] = \OC_Helper::streamCopy($stream, $target); + [$count, $result] = Files::streamCopy($stream, $target, true); fclose($stream); fclose($target); diff --git a/lib/private/Files/Storage/Wrapper/Jail.php b/lib/private/Files/Storage/Wrapper/Jail.php index c8db0e94e59..38b113cef88 100644 --- a/lib/private/Files/Storage/Wrapper/Jail.php +++ b/lib/private/Files/Storage/Wrapper/Jail.php @@ -11,6 +11,7 @@ use OC\Files\Cache\Wrapper\CacheJail; use OC\Files\Cache\Wrapper\JailPropagator; use OC\Files\Cache\Wrapper\JailWatcher; use OC\Files\Filesystem; +use OCP\Files; use OCP\Files\Cache\ICache; use OCP\Files\Cache\IPropagator; use OCP\Files\Cache\IWatcher; @@ -253,7 +254,7 @@ class Jail extends Wrapper { return $storage->writeStream($this->getUnjailedPath($path), $stream, $size); } else { $target = $this->fopen($path, 'w'); - [$count, $result] = \OC_Helper::streamCopy($stream, $target); + $count = Files::streamCopy($stream, $target); fclose($stream); fclose($target); return $count; diff --git a/lib/private/Files/Storage/Wrapper/Wrapper.php b/lib/private/Files/Storage/Wrapper/Wrapper.php index 6dea439fe25..7af11dd5ef7 100644 --- a/lib/private/Files/Storage/Wrapper/Wrapper.php +++ b/lib/private/Files/Storage/Wrapper/Wrapper.php @@ -9,6 +9,7 @@ namespace OC\Files\Storage\Wrapper; use OC\Files\Storage\FailedStorage; use OC\Files\Storage\Storage; +use OCP\Files; use OCP\Files\Cache\ICache; use OCP\Files\Cache\IPropagator; use OCP\Files\Cache\IScanner; @@ -322,7 +323,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage, IWriteStrea return $storage->writeStream($path, $stream, $size); } else { $target = $this->fopen($path, 'w'); - [$count, $result] = \OC_Helper::streamCopy($stream, $target); + $count = Files::streamCopy($stream, $target); fclose($stream); fclose($target); return $count; diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index e49043355e8..6832b4e1551 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -17,6 +17,7 @@ use OC\User\Manager as UserManager; use OC\User\User; use OCA\Files_Sharing\SharedMount; use OCP\Constants; +use OCP\Files; use OCP\Files\Cache\ICacheEntry; use OCP\Files\ConnectionLostException; use OCP\Files\EmptyFileNameException; @@ -629,7 +630,7 @@ class View { [$storage, $internalPath] = $this->resolvePath($path); $target = $storage->fopen($internalPath, 'w'); if ($target) { - [, $result] = \OC_Helper::streamCopy($data, $target); + [, $result] = Files::streamCopy($data, $target, true); fclose($target); fclose($data); diff --git a/lib/private/legacy/OC_Helper.php b/lib/private/legacy/OC_Helper.php index 6caab38b784..a06b15573cb 100644 --- a/lib/private/legacy/OC_Helper.php +++ b/lib/private/legacy/OC_Helper.php @@ -12,6 +12,7 @@ use OCP\Files\Mount\IMountPoint; use OCP\IBinaryFinder; use OCP\ICacheFactory; use OCP\IUser; +use OCP\Server; use OCP\Util; use Psr\Log\LoggerInterface; @@ -36,32 +37,6 @@ class OC_Helper { private static ?bool $quotaIncludeExternalStorage = null; /** - * Make a human file size - * @param int|float $bytes file size in bytes - * @return string a human readable file size - * @deprecated 4.0.0 replaced with \OCP\Util::humanFileSize - * - * Makes 2048 to 2 kB. - */ - public static function humanFileSize(int|float $bytes): string { - return \OCP\Util::humanFileSize($bytes); - } - - /** - * Make a computer file size - * @param string $str file size in human readable format - * @return false|int|float a file size in bytes - * @deprecated 4.0.0 Use \OCP\Util::computerFileSize - * - * Makes 2kB to 2048. - * - * Inspired by: https://www.php.net/manual/en/function.filesize.php#92418 - */ - public static function computerFileSize(string $str): false|int|float { - return \OCP\Util::computerFileSize($str); - } - - /** * Recursive copying of folders * @param string $src source folder * @param string $dest target folder @@ -92,17 +67,6 @@ class OC_Helper { } /** - * Recursive deletion of folders - * @param string $dir path to the folder - * @param bool $deleteSelf if set to false only the content of the folder will be deleted - * @return bool - * @deprecated 5.0.0 use \OCP\Files::rmdirr instead - */ - public static function rmdirr($dir, $deleteSelf = true) { - return \OCP\Files::rmdirr($dir, $deleteSelf); - } - - /** * @deprecated 18.0.0 * @return \OC\Files\Type\TemplateManager */ @@ -159,31 +123,10 @@ class OC_Helper { * @param resource $source * @param resource $target * @return array the number of bytes copied and result + * @deprecated 5.0.0 - Use \OCP\Files::streamCopy */ public static function streamCopy($source, $target) { - if (!$source or !$target) { - return [0, false]; - } - $bufSize = 8192; - $result = true; - $count = 0; - while (!feof($source)) { - $buf = fread($source, $bufSize); - $bytesWritten = fwrite($target, $buf); - if ($bytesWritten !== false) { - $count += $bytesWritten; - } - // note: strlen is expensive so only use it when necessary, - // on the last block - if ($bytesWritten === false - || ($bytesWritten < $bufSize && $bytesWritten < strlen($buf)) - ) { - // write error, could be disk full ? - $result = false; - break; - } - } - return [$count, $result]; + return \OCP\Files::streamCopy($source, $target, true); } /** @@ -246,73 +189,12 @@ class OC_Helper { } /** - * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is. - * Based on https://www.php.net/manual/en/function.array-change-key-case.php#107715 - * - * @param array $input The array to work on - * @param int $case Either MB_CASE_UPPER or MB_CASE_LOWER (default) - * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8 - * @return array - * @deprecated 4.5.0 use \OCP\Util::mb_array_change_key_case instead - */ - public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8') { - return \OCP\Util::mb_array_change_key_case($input, $case, $encoding); - } - - /** - * Performs a search in a nested array. - * Taken from https://www.php.net/manual/en/function.array-search.php#97645 - * - * @param array $haystack the array to be searched - * @param string $needle the search string - * @param mixed $index optional, only search this key name - * @return mixed the key of the matching field, otherwise false - * @deprecated 4.5.0 - use \OCP\Util::recursiveArraySearch - */ - public static function recursiveArraySearch($haystack, $needle, $index = null) { - return \OCP\Util::recursiveArraySearch($haystack, $needle, $index); - } - - /** - * calculates the maximum upload size respecting system settings, free space and user quota - * - * @param string $dir the current folder where the user currently operates - * @param int|float $freeSpace the number of bytes free on the storage holding $dir, if not set this will be received from the storage directly - * @return int|float number of bytes representing - * @deprecated 5.0.0 - use \OCP\Util::maxUploadFilesize - */ - public static function maxUploadFilesize($dir, $freeSpace = null) { - return \OCP\Util::maxUploadFilesize($dir, $freeSpace); - } - - /** - * Calculate free space left within user quota - * - * @param string $dir the current folder where the user currently operates - * @return int|float number of bytes representing - * @deprecated 7.0.0 - use \OCP\Util::freeSpace - */ - public static function freeSpace($dir) { - return \OCP\Util::freeSpace($dir); - } - - /** - * Calculate PHP upload limit - * - * @return int|float PHP upload file size limit - * @deprecated 7.0.0 - use \OCP\Util::uploadLimit - */ - public static function uploadLimit() { - return \OCP\Util::uploadLimit(); - } - - /** * Checks if a function is available * * @deprecated 25.0.0 use \OCP\Util::isFunctionEnabled instead */ public static function is_function_enabled(string $function_name): bool { - return \OCP\Util::isFunctionEnabled($function_name); + return Util::isFunctionEnabled($function_name); } /** @@ -320,7 +202,7 @@ class OC_Helper { * @deprecated 25.0.0 Use \OC\BinaryFinder directly */ public static function findBinaryPath(string $program): ?string { - $result = \OCP\Server::get(IBinaryFinder::class)->findBinaryPath($program); + $result = Server::get(IBinaryFinder::class)->findBinaryPath($program); return $result !== false ? $result : null; } @@ -340,7 +222,7 @@ class OC_Helper { */ public static function getStorageInfo($path, $rootInfo = null, $includeMountPoints = true, $useCache = true) { if (!self::$cacheFactory) { - self::$cacheFactory = \OC::$server->get(ICacheFactory::class); + self::$cacheFactory = Server::get(ICacheFactory::class); } $memcache = self::$cacheFactory->createLocal('storage_info'); diff --git a/lib/public/Files.php b/lib/public/Files.php index b12aa463f1a..3df3152b0ef 100644 --- a/lib/public/Files.php +++ b/lib/public/Files.php @@ -85,15 +85,45 @@ class Files { /** * Copy the contents of one stream to another + * + * @template T of null|true * @param resource $source * @param resource $target - * @return int the number of bytes copied + * @param T $includeResult + * @return int|array + * @psalm-return (T is true ? array{0: int, 1: bool} : int) * @since 5.0.0 + * @since 32.0.0 added $includeResult parameter * @deprecated 14.0.0 */ - public static function streamCopy($source, $target) { - [$count, ] = \OC_Helper::streamCopy($source, $target); - return $count; + public static function streamCopy($source, $target, ?bool $includeResult = null) { + if (!$source or !$target) { + return $includeResult ? [0, false] : 0; + } + + $bufSize = 8192; + $count = 0; + $result = true; + while (!feof($source)) { + $buf = fread($source, $bufSize); + if ($buf === false) { + $result = false; + break; + } + + $bytesWritten = fwrite($target, $buf); + if ($bytesWritten !== false) { + $count += $bytesWritten; + } + + if ($bytesWritten === false + || ($bytesWritten < $bufSize && $bytesWritten < strlen($buf)) + ) { + $result = false; + break; + } + } + return $includeResult ? [$count, $result] : $count; } /** diff --git a/lib/public/Template.php b/lib/public/Template.php index 715115bc635..c29de52db4f 100644 --- a/lib/public/Template.php +++ b/lib/public/Template.php @@ -23,7 +23,7 @@ require_once __DIR__ . '/../private/Template/functions.php'; */ class Template extends \OC_Template implements ITemplate { /** - * Make OC_Helper::imagePath available as a simple function + * Make \OCP\IURLGenerator::imagePath available as a simple function * * @see \OCP\IURLGenerator::imagePath * @@ -39,7 +39,7 @@ class Template extends \OC_Template implements ITemplate { /** - * Make OC_Helper::mimetypeIcon available as a simple function + * Make IMimeTypeDetector->mimeTypeIcon available as a simple function * * @param string $mimetype * @return string to the image of this file type. diff --git a/package-lock.json b/package-lock.json index 530a13a199e..4fb743eb1f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "@vitest/coverage-v8": "^3.1.3", "@vue/test-utils": "^1.3.5", "@vue/tsconfig": "^0.5.1", - "@zip.js/zip.js": "^2.7.60", + "@zip.js/zip.js": "^2.7.61", "babel-loader-exclude-node-modules-except": "^1.2.1", "babel-plugin-module-resolver": "^5.0.2", "colord": "^2.9.3", @@ -142,7 +142,7 @@ "puppeteer": "^24.7.2", "raw-loader": "^4.0.2", "regextras": "^0.8.0", - "sass": "^1.87.0", + "sass": "^1.89.0", "sinon": "<= 5.0.7", "stylelint": "^16.19.1", "stylelint-use-logical": "^2.1.2", @@ -7645,9 +7645,9 @@ "license": "Apache-2.0" }, "node_modules/@zip.js/zip.js": { - "version": "2.7.60", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.60.tgz", - "integrity": "sha512-vA3rLyqdxBrVo1FWSsbyoecaqWTV+vgPRf0QKeM7kVDG0r+lHUqd7zQDv1TO9k4BcAoNzNDSNrrel24Mk6addA==", + "version": "2.7.61", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.61.tgz", + "integrity": "sha512-+tZvY10nkW0pJoU88XFWLBd2O9PJPvEnDhSY/jQHfIroN5W5qGfPgFHKC4lkx0+9Vw/0IAkNHf1XBVInBkM9Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -21685,9 +21685,9 @@ "license": "BSD-3-Clause" }, "node_modules/sass": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", - "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz", + "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 4f6e69a7d52..46035e1196c 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "@vitest/coverage-v8": "^3.1.3", "@vue/test-utils": "^1.3.5", "@vue/tsconfig": "^0.5.1", - "@zip.js/zip.js": "^2.7.60", + "@zip.js/zip.js": "^2.7.61", "babel-loader-exclude-node-modules-except": "^1.2.1", "babel-plugin-module-resolver": "^5.0.2", "colord": "^2.9.3", @@ -173,7 +173,7 @@ "puppeteer": "^24.7.2", "raw-loader": "^4.0.2", "regextras": "^0.8.0", - "sass": "^1.87.0", + "sass": "^1.89.0", "sinon": "<= 5.0.7", "stylelint": "^16.19.1", "stylelint-use-logical": "^2.1.2", diff --git a/tests/lib/Files/FilesystemTest.php b/tests/lib/Files/FilesystemTest.php index 4a3543474a1..966f6f34cee 100644 --- a/tests/lib/Files/FilesystemTest.php +++ b/tests/lib/Files/FilesystemTest.php @@ -10,6 +10,7 @@ namespace Test\Files; use OC\Files\Mount\MountPoint; use OC\Files\Storage\Temporary; use OC\User\NoUserException; +use OCP\Files; use OCP\Files\Config\IMountProvider; use OCP\Files\Storage\IStorageFactory; use OCP\IUser; @@ -74,7 +75,7 @@ class FilesystemTest extends \Test\TestCase { protected function tearDown(): void { foreach ($this->tmpDirs as $dir) { - \OC_Helper::rmdirr($dir); + Files::rmdirr($dir); } $this->logout(); diff --git a/tests/lib/Files/Storage/CommonTest.php b/tests/lib/Files/Storage/CommonTest.php index b51b35be8f9..529615f3733 100644 --- a/tests/lib/Files/Storage/CommonTest.php +++ b/tests/lib/Files/Storage/CommonTest.php @@ -9,6 +9,7 @@ namespace Test\Files\Storage; use OC\Files\Storage\Wrapper\Jail; use OC\Files\Storage\Wrapper\Wrapper; +use OCP\Files; use OCP\Files\IFilenameValidator; use OCP\Files\InvalidCharacterInPathException; use OCP\Files\InvalidPathException; @@ -37,7 +38,7 @@ class CommonTest extends Storage { } protected function tearDown(): void { - \OC_Helper::rmdirr($this->tmpDir); + Files::rmdirr($this->tmpDir); $this->restoreService(IFilenameValidator::class); parent::tearDown(); } diff --git a/tests/lib/Files/Storage/HomeTest.php b/tests/lib/Files/Storage/HomeTest.php index b6d0f1aa85a..26b81c6f1a0 100644 --- a/tests/lib/Files/Storage/HomeTest.php +++ b/tests/lib/Files/Storage/HomeTest.php @@ -8,6 +8,7 @@ namespace Test\Files\Storage; use OC\User\User; +use OCP\Files; class DummyUser extends User { private $home; @@ -62,7 +63,7 @@ class HomeTest extends Storage { } protected function tearDown(): void { - \OC_Helper::rmdirr($this->tmpDir); + Files::rmdirr($this->tmpDir); parent::tearDown(); } diff --git a/tests/lib/Files/Storage/LocalTest.php b/tests/lib/Files/Storage/LocalTest.php index 65bc538ef17..13317fad7bb 100644 --- a/tests/lib/Files/Storage/LocalTest.php +++ b/tests/lib/Files/Storage/LocalTest.php @@ -8,6 +8,7 @@ namespace Test\Files\Storage; use OC\Files\Storage\Wrapper\Jail; +use OCP\Files; /** * Class LocalTest @@ -30,7 +31,7 @@ class LocalTest extends Storage { } protected function tearDown(): void { - \OC_Helper::rmdirr($this->tmpDir); + Files::rmdirr($this->tmpDir); parent::tearDown(); } diff --git a/tests/lib/Files/Storage/Wrapper/QuotaTest.php b/tests/lib/Files/Storage/Wrapper/QuotaTest.php index aebae9b3c62..791e8047f7f 100644 --- a/tests/lib/Files/Storage/Wrapper/QuotaTest.php +++ b/tests/lib/Files/Storage/Wrapper/QuotaTest.php @@ -10,6 +10,7 @@ namespace Test\Files\Storage\Wrapper; //ensure the constants are loaded use OC\Files\Cache\CacheEntry; use OC\Files\Storage\Local; +use OCP\Files; \OC::$loader->load('\OC\Files\Filesystem'); @@ -35,7 +36,7 @@ class QuotaTest extends \Test\Files\Storage\Storage { } protected function tearDown(): void { - \OC_Helper::rmdirr($this->tmpDir); + Files::rmdirr($this->tmpDir); parent::tearDown(); } diff --git a/tests/lib/Files/Storage/Wrapper/WrapperTest.php b/tests/lib/Files/Storage/Wrapper/WrapperTest.php index 1d0f41bf3ed..4cbae1762fc 100644 --- a/tests/lib/Files/Storage/Wrapper/WrapperTest.php +++ b/tests/lib/Files/Storage/Wrapper/WrapperTest.php @@ -7,6 +7,8 @@ namespace Test\Files\Storage\Wrapper; +use OCP\Files; + class WrapperTest extends \Test\Files\Storage\Storage { /** * @var string tmpDir @@ -22,7 +24,7 @@ class WrapperTest extends \Test\Files\Storage\Storage { } protected function tearDown(): void { - \OC_Helper::rmdirr($this->tmpDir); + Files::rmdirr($this->tmpDir); parent::tearDown(); } diff --git a/tests/lib/FilesTest.php b/tests/lib/FilesTest.php new file mode 100644 index 00000000000..2ba6ce2666b --- /dev/null +++ b/tests/lib/FilesTest.php @@ -0,0 +1,42 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace Test; + +use OCP\Files; +use OCP\ITempManager; +use OCP\Server; + +class FilesTest extends TestCase { + + /** + * Tests recursive folder deletion with rmdirr() + */ + public function testRecursiveFolderDeletion(): void { + $baseDir = Server::get(ITempManager::class)->getTemporaryFolder() . '/'; + mkdir($baseDir . 'a/b/c/d/e', 0777, true); + mkdir($baseDir . 'a/b/c1/d/e', 0777, true); + mkdir($baseDir . 'a/b/c2/d/e', 0777, true); + mkdir($baseDir . 'a/b1/c1/d/e', 0777, true); + mkdir($baseDir . 'a/b2/c1/d/e', 0777, true); + mkdir($baseDir . 'a/b3/c1/d/e', 0777, true); + mkdir($baseDir . 'a1/b', 0777, true); + mkdir($baseDir . 'a1/c', 0777, true); + file_put_contents($baseDir . 'a/test.txt', 'Hello file!'); + file_put_contents($baseDir . 'a/b1/c1/test one.txt', 'Hello file one!'); + file_put_contents($baseDir . 'a1/b/test two.txt', 'Hello file two!'); + Files::rmdirr($baseDir . 'a'); + + $this->assertFalse(file_exists($baseDir . 'a')); + $this->assertTrue(file_exists($baseDir . 'a1')); + + Files::rmdirr($baseDir); + $this->assertFalse(file_exists($baseDir)); + } +} diff --git a/tests/lib/HelperStorageTest.php b/tests/lib/HelperStorageTest.php index e4e877ab2a8..628e77e935a 100644 --- a/tests/lib/HelperStorageTest.php +++ b/tests/lib/HelperStorageTest.php @@ -94,6 +94,7 @@ class HelperStorageTest extends \Test\TestCase { $this->assertEquals(5, $storageInfo['used']); $this->assertEquals(17, $storageInfo['total']); } + private function getIncludeExternalStorage(): bool { $class = new \ReflectionClass(\OC_Helper::class); $prop = $class->getProperty('quotaIncludeExternalStorage'); diff --git a/tests/lib/LegacyHelperTest.php b/tests/lib/LegacyHelperTest.php index 15af5ca06e8..0938640b892 100644 --- a/tests/lib/LegacyHelperTest.php +++ b/tests/lib/LegacyHelperTest.php @@ -23,85 +23,6 @@ class LegacyHelperTest extends \Test\TestCase { \OC::$WEBROOT = $this->originalWebRoot; } - /** - * @dataProvider humanFileSizeProvider - */ - public function testHumanFileSize($expected, $input): void { - $result = OC_Helper::humanFileSize($input); - $this->assertEquals($expected, $result); - } - - public static function humanFileSizeProvider(): array { - return [ - ['0 B', 0], - ['1 KB', 1024], - ['9.5 MB', 10000000], - ['1.3 GB', 1395864371], - ['465.7 GB', 500000000000], - ['454.7 TB', 500000000000000], - ['444.1 PB', 500000000000000000], - ]; - } - - /** - * @dataProvider providesComputerFileSize - */ - public function testComputerFileSize($expected, $input): void { - $result = OC_Helper::computerFileSize($input); - $this->assertEquals($expected, $result); - } - - public static function providesComputerFileSize(): array { - return [ - [0.0, '0 B'], - [1024.0, '1 KB'], - [1395864371.0, '1.3 GB'], - [9961472.0, '9.5 MB'], - [500041567437.0, '465.7 GB'], - [false, '12 GB etfrhzui'] - ]; - } - - public function testMb_array_change_key_case(): void { - $arrayStart = [ - 'Foo' => 'bar', - 'Bar' => 'foo', - ]; - $arrayResult = [ - 'foo' => 'bar', - 'bar' => 'foo', - ]; - $result = OC_Helper::mb_array_change_key_case($arrayStart); - $expected = $arrayResult; - $this->assertEquals($result, $expected); - - $arrayStart = [ - 'foo' => 'bar', - 'bar' => 'foo', - ]; - $arrayResult = [ - 'FOO' => 'bar', - 'BAR' => 'foo', - ]; - $result = OC_Helper::mb_array_change_key_case($arrayStart, MB_CASE_UPPER); - $expected = $arrayResult; - $this->assertEquals($result, $expected); - } - - public function testRecursiveArraySearch(): void { - $haystack = [ - 'Foo' => 'own', - 'Bar' => 'Cloud', - ]; - - $result = OC_Helper::recursiveArraySearch($haystack, 'own'); - $expected = 'Foo'; - $this->assertEquals($result, $expected); - - $result = OC_Helper::recursiveArraySearch($haystack, 'NotFound'); - $this->assertFalse($result); - } - public function testBuildNotExistingFileNameForView(): void { $viewMock = $this->createMock(View::class); $this->assertEquals('/filename', OC_Helper::buildNotExistingFileNameForView('/', 'filename', $viewMock)); @@ -227,29 +148,4 @@ class LegacyHelperTest extends \Test\TestCase { [3670, true, \OC::$SERVERROOT . '/tests/data/testimage.png', \OC::$SERVERROOT . '/tests/data/testimage-copy.png'], ]; } - - /** - * Tests recursive folder deletion with rmdirr() - */ - public function testRecursiveFolderDeletion(): void { - $baseDir = \OC::$server->getTempManager()->getTemporaryFolder() . '/'; - mkdir($baseDir . 'a/b/c/d/e', 0777, true); - mkdir($baseDir . 'a/b/c1/d/e', 0777, true); - mkdir($baseDir . 'a/b/c2/d/e', 0777, true); - mkdir($baseDir . 'a/b1/c1/d/e', 0777, true); - mkdir($baseDir . 'a/b2/c1/d/e', 0777, true); - mkdir($baseDir . 'a/b3/c1/d/e', 0777, true); - mkdir($baseDir . 'a1/b', 0777, true); - mkdir($baseDir . 'a1/c', 0777, true); - file_put_contents($baseDir . 'a/test.txt', 'Hello file!'); - file_put_contents($baseDir . 'a/b1/c1/test one.txt', 'Hello file one!'); - file_put_contents($baseDir . 'a1/b/test two.txt', 'Hello file two!'); - \OC_Helper::rmdirr($baseDir . 'a'); - - $this->assertFalse(file_exists($baseDir . 'a')); - $this->assertTrue(file_exists($baseDir . 'a1')); - - \OC_Helper::rmdirr($baseDir); - $this->assertFalse(file_exists($baseDir)); - } } diff --git a/tests/lib/Preview/OfficeTest.php b/tests/lib/Preview/OfficeTest.php index c9019d017a3..167c442dd34 100644 --- a/tests/lib/Preview/OfficeTest.php +++ b/tests/lib/Preview/OfficeTest.php @@ -7,6 +7,9 @@ namespace Test\Preview; +use OCP\IBinaryFinder; +use OCP\Server; + /** * Class OfficeTest * @@ -16,10 +19,11 @@ namespace Test\Preview; */ class OfficeTest extends Provider { protected function setUp(): void { - $libreofficeBinary = \OC_Helper::findBinaryPath('libreoffice'); - $openofficeBinary = ($libreofficeBinary) ? null : \OC_Helper::findBinaryPath('openoffice'); + $binaryFinder = Server::get(IBinaryFinder::class); + $libreofficeBinary = $binaryFinder->findBinaryPath('libreoffice'); + $openofficeBinary = $libreofficeBinary === false ? $binaryFinder->findBinaryPath('openoffice') : false; - if ($libreofficeBinary || $openofficeBinary) { + if ($libreofficeBinary !== false || $openofficeBinary !== false) { parent::setUp(); $fileName = 'testimage.odt'; diff --git a/tests/lib/TempManagerTest.php b/tests/lib/TempManagerTest.php index 63cffc0dcae..b607772f5c3 100644 --- a/tests/lib/TempManagerTest.php +++ b/tests/lib/TempManagerTest.php @@ -9,6 +9,7 @@ namespace Test; use bantu\IniGetWrapper\IniGetWrapper; +use OCP\Files; use OCP\IConfig; use Psr\Log\LoggerInterface; @@ -26,7 +27,7 @@ class TempManagerTest extends \Test\TestCase { protected function tearDown(): void { if ($this->baseDir !== null) { - \OC_Helper::rmdirr($this->baseDir); + Files::rmdirr($this->baseDir); } $this->baseDir = null; parent::tearDown(); diff --git a/tests/lib/UtilTest.php b/tests/lib/UtilTest.php index 0063a991e48..e124ea687d8 100644 --- a/tests/lib/UtilTest.php +++ b/tests/lib/UtilTest.php @@ -334,4 +334,84 @@ class UtilTest extends \Test\TestCase { // each of the characters is 12 bytes $this->assertEquals('🙈', Util::shortenMultibyteString('🙈🙊🙉', 16, 2)); } + + /** + * @dataProvider humanFileSizeProvider + */ + public function testHumanFileSize($expected, $input): void { + $result = Util::humanFileSize($input); + $this->assertEquals($expected, $result); + } + + public static function humanFileSizeProvider(): array { + return [ + ['0 B', 0], + ['1 KB', 1024], + ['9.5 MB', 10000000], + ['1.3 GB', 1395864371], + ['465.7 GB', 500000000000], + ['454.7 TB', 500000000000000], + ['444.1 PB', 500000000000000000], + ]; + } + + /** + * @dataProvider providesComputerFileSize + */ + public function testComputerFileSize($expected, $input): void { + $result = Util::computerFileSize($input); + $this->assertEquals($expected, $result); + } + + public static function providesComputerFileSize(): array { + return [ + [0.0, '0 B'], + [1024.0, '1 KB'], + [1395864371.0, '1.3 GB'], + [9961472.0, '9.5 MB'], + [500041567437.0, '465.7 GB'], + [false, '12 GB etfrhzui'] + ]; + } + + public function testMb_array_change_key_case(): void { + $arrayStart = [ + 'Foo' => 'bar', + 'Bar' => 'foo', + ]; + $arrayResult = [ + 'foo' => 'bar', + 'bar' => 'foo', + ]; + $result = Util::mb_array_change_key_case($arrayStart); + $expected = $arrayResult; + $this->assertEquals($result, $expected); + + $arrayStart = [ + 'foo' => 'bar', + 'bar' => 'foo', + ]; + $arrayResult = [ + 'FOO' => 'bar', + 'BAR' => 'foo', + ]; + $result = Util::mb_array_change_key_case($arrayStart, MB_CASE_UPPER); + $expected = $arrayResult; + $this->assertEquals($result, $expected); + } + + public function testRecursiveArraySearch(): void { + $haystack = [ + 'Foo' => 'own', + 'Bar' => 'Cloud', + ]; + + $result = Util::recursiveArraySearch($haystack, 'own'); + $expected = 'Foo'; + $this->assertEquals($result, $expected); + + $result = Util::recursiveArraySearch($haystack, 'NotFound'); + $this->assertFalse($result); + } + } |