aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/comments/l10n/es_CO.js35
-rw-r--r--apps/comments/l10n/es_CO.json33
-rw-r--r--apps/dav/src/components/AbsenceForm.vue2
-rw-r--r--apps/dav/src/components/ExampleContentDownloadButton.vue4
-rw-r--r--apps/dav/src/components/ExampleEventSettings.vue2
-rw-r--r--apps/dav/src/settings-example-content.js2
-rw-r--r--apps/dav/src/views/ExampleContentSettingsSection.vue2
-rw-r--r--apps/files/l10n/cs.js2
-rw-r--r--apps/files/l10n/cs.json2
-rw-r--r--apps/files/l10n/en_GB.js1
-rw-r--r--apps/files/l10n/en_GB.json1
-rw-r--r--apps/files/l10n/ga.js3
-rw-r--r--apps/files/l10n/ga.json3
-rw-r--r--apps/files/l10n/it.js7
-rw-r--r--apps/files/l10n/it.json7
-rw-r--r--apps/files/l10n/tr.js4
-rw-r--r--apps/files/l10n/tr.json4
-rw-r--r--apps/files/l10n/zh_HK.js2
-rw-r--r--apps/files/l10n/zh_HK.json2
-rw-r--r--apps/files/src/actions/deleteAction.ts2
-rw-r--r--apps/files/src/actions/moveOrCopyAction.ts4
-rw-r--r--apps/files/src/actions/renameAction.ts2
-rw-r--r--apps/files/src/actions/viewInFolderAction.ts9
-rw-r--r--apps/files/src/components/FileEntry/FileEntryPreview.vue2
-rw-r--r--apps/files/src/components/FileListFilter/FileListFilterModified.vue6
-rw-r--r--apps/files/src/components/NavigationQuota.vue2
-rw-r--r--apps/files/src/newMenu/newFolder.ts7
-rw-r--r--apps/files/src/views/FilesList.vue4
-rw-r--r--apps/files/src/views/Navigation.vue2
-rw-r--r--apps/files/src/views/favorites.spec.ts26
-rw-r--r--apps/files/src/views/favorites.ts14
-rw-r--r--apps/files/src/views/files.ts2
-rw-r--r--apps/files/src/views/folderTree.ts2
-rw-r--r--apps/files/src/views/personal-files.ts2
-rw-r--r--apps/files_sharing/l10n/it.js2
-rw-r--r--apps/files_sharing/l10n/it.json2
-rw-r--r--apps/files_sharing/src/components/FileListFilterAccount.vue4
-rw-r--r--apps/files_sharing/src/components/NewFileRequestDialog/NewFileRequestDialogIntro.vue2
-rw-r--r--apps/files_sharing/src/components/SharingEntryLink.vue16
-rw-r--r--apps/files_sharing/src/components/SharingEntryQuickShareSelect.vue2
-rw-r--r--apps/files_sharing/src/files_actions/sharingStatusAction.ts4
-rw-r--r--apps/files_sharing/src/files_newMenu/newFileRequest.ts2
-rw-r--r--apps/files_sharing/src/files_views/shares.ts6
-rw-r--r--apps/files_sharing/src/mixins/SharesMixin.js35
-rw-r--r--apps/files_sharing/src/views/FilesViewFileDropEmptyContent.vue2
-rw-r--r--apps/files_sharing/src/views/SharingDetailsTab.vue19
-rw-r--r--apps/files_sharing/src/views/SharingTab.vue2
-rw-r--r--apps/files_trashbin/src/files_views/trashbinView.ts2
-rw-r--r--apps/files_versions/src/components/Version.vue2
-rw-r--r--apps/oauth2/src/components/OAuthItem.vue2
-rw-r--r--apps/profile/l10n/be.js12
-rw-r--r--apps/profile/l10n/be.json10
-rw-r--r--apps/profile/src/views/Profile.vue4
-rw-r--r--apps/settings/img/password.svg2
-rw-r--r--apps/settings/img/personal.pngbin2017 -> 569 bytes
-rw-r--r--apps/settings/img/personal.svg2
-rw-r--r--apps/settings/img/users-white.svg2
-rw-r--r--apps/settings/img/users.svg2
-rw-r--r--apps/settings/l10n/cs.js2
-rw-r--r--apps/settings/l10n/cs.json2
-rw-r--r--apps/settings/l10n/en_GB.js2
-rw-r--r--apps/settings/l10n/en_GB.json2
-rw-r--r--apps/settings/l10n/fr.js2
-rw-r--r--apps/settings/l10n/fr.json2
-rw-r--r--apps/settings/l10n/ga.js2
-rw-r--r--apps/settings/l10n/ga.json2
-rw-r--r--apps/settings/l10n/lv.js8
-rw-r--r--apps/settings/l10n/lv.json8
-rw-r--r--apps/settings/l10n/mk.js4
-rw-r--r--apps/settings/l10n/mk.json4
-rw-r--r--apps/settings/l10n/tr.js3
-rw-r--r--apps/settings/l10n/tr.json3
-rw-r--r--apps/settings/src/components/AppList/AppLevelBadge.vue4
-rw-r--r--apps/settings/src/components/AppNavigationGroupList.vue4
-rw-r--r--apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue4
-rw-r--r--apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue6
-rw-r--r--apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue22
-rw-r--r--apps/settings/src/components/AuthToken.vue4
-rw-r--r--apps/settings/src/components/GroupListItem.vue6
-rw-r--r--apps/settings/src/components/PersonalInfo/AvatarSection.vue2
-rw-r--r--apps/settings/src/components/PersonalInfo/DetailsSection.vue2
-rw-r--r--apps/settings/src/components/PersonalInfo/EmailSection/Email.vue8
-rw-r--r--apps/settings/src/components/UserList.vue6
-rw-r--r--apps/settings/src/components/Users/UserRowActions.vue2
-rw-r--r--apps/settings/src/constants/AccountPropertyConstants.ts6
-rw-r--r--apps/settings/src/constants/AppstoreCategoryIcons.ts40
-rw-r--r--apps/settings/src/views/UserManagementNavigation.vue10
-rw-r--r--apps/systemtags/src/components/SystemTagPicker.vue4
-rw-r--r--apps/systemtags/src/files_actions/bulkSystemTagsAction.ts2
-rw-r--r--apps/systemtags/src/files_views/systemtagsView.ts2
-rw-r--r--apps/theming/src/components/BackgroundSettings.vue2
-rw-r--r--apps/theming/src/components/UserPrimaryColor.vue2
-rw-r--r--apps/theming/src/components/admin/FileInputField.vue2
-rw-r--r--apps/updatenotification/src/components/UpdateNotification.vue2
-rw-r--r--apps/weather_status/l10n/sw.js63
-rw-r--r--apps/weather_status/l10n/sw.json61
96 files changed, 485 insertions, 169 deletions
diff --git a/apps/comments/l10n/es_CO.js b/apps/comments/l10n/es_CO.js
new file mode 100644
index 00000000000..b8516c1449b
--- /dev/null
+++ b/apps/comments/l10n/es_CO.js
@@ -0,0 +1,35 @@
+OC.L10N.register(
+ "comments",
+ {
+ "Comments" : "Comentarios",
+ "You commented" : "Comentaste",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "Files" : "Archivo",
+ "You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Fue mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado",
+ "{user} mentioned you in a comment on \"{file}\"" : "{user} le mencionó en un comentario en “{file}”",
+ "Files app plugin to add comments to files" : "Plugin de la aplicación de archivos para agregar comentarios a los archivos",
+ "Edit comment" : "Editar comentario",
+ "Delete comment" : "Borrar comentario",
+ "Cancel edit" : "Cancelar edición",
+ "New comment" : "Nuevo comentario",
+ "Write a comment …" : "Escribir un comentario …",
+ "Post comment" : "Publicar comentario",
+ "@ for mentions, : for emoji, / for smart picker" : "@ para menciones, : para emoticonos, / para selector inteligente",
+ "Could not reload comments" : "No se pudieron recargar los comentarios",
+ "Failed to mark comments as read" : "No se pudieron marcar los comentarios como leídos",
+ "Unable to load the comments list" : "No se puede cargar la lista de comentarios",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "No more messages" : "No hay más mensajes",
+ "Retry" : "Reintentar",
+ "Comment" : "Comentario",
+ "An error occurred while trying to edit the comment" : "Ocurrió un error al intentar editar el comentario",
+ "Comment deleted" : "Comentario borrado",
+ "An error occurred while trying to delete the comment" : "Ocurrió un error intentando borrar el comentario",
+ "An error occurred while trying to create the comment" : "Ocurrió un error al intentar crear el comentario"
+},
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/comments/l10n/es_CO.json b/apps/comments/l10n/es_CO.json
new file mode 100644
index 00000000000..c212111b999
--- /dev/null
+++ b/apps/comments/l10n/es_CO.json
@@ -0,0 +1,33 @@
+{ "translations": {
+ "Comments" : "Comentarios",
+ "You commented" : "Comentaste",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "Files" : "Archivo",
+ "You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Fue mencionado en \"{file}\", en un comentario realizado por un usuario que ha sido eliminado",
+ "{user} mentioned you in a comment on \"{file}\"" : "{user} le mencionó en un comentario en “{file}”",
+ "Files app plugin to add comments to files" : "Plugin de la aplicación de archivos para agregar comentarios a los archivos",
+ "Edit comment" : "Editar comentario",
+ "Delete comment" : "Borrar comentario",
+ "Cancel edit" : "Cancelar edición",
+ "New comment" : "Nuevo comentario",
+ "Write a comment …" : "Escribir un comentario …",
+ "Post comment" : "Publicar comentario",
+ "@ for mentions, : for emoji, / for smart picker" : "@ para menciones, : para emoticonos, / para selector inteligente",
+ "Could not reload comments" : "No se pudieron recargar los comentarios",
+ "Failed to mark comments as read" : "No se pudieron marcar los comentarios como leídos",
+ "Unable to load the comments list" : "No se puede cargar la lista de comentarios",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "No more messages" : "No hay más mensajes",
+ "Retry" : "Reintentar",
+ "Comment" : "Comentario",
+ "An error occurred while trying to edit the comment" : "Ocurrió un error al intentar editar el comentario",
+ "Comment deleted" : "Comentario borrado",
+ "An error occurred while trying to delete the comment" : "Ocurrió un error intentando borrar el comentario",
+ "An error occurred while trying to create the comment" : "Ocurrió un error al intentar crear el comentario"
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/dav/src/components/AbsenceForm.vue b/apps/dav/src/components/AbsenceForm.vue
index 18c60ba4dd4..5350c04a565 100644
--- a/apps/dav/src/components/AbsenceForm.vue
+++ b/apps/dav/src/components/AbsenceForm.vue
@@ -219,7 +219,7 @@ export default {
lastDay: formatDateAsYMD(this.lastDay),
status: this.status,
message: this.message,
- replacementUserId: this.replacementUser?.user ?? null
+ replacementUserId: this.replacementUser?.user ?? null,
})
showSuccess(this.$t('dav', 'Absence saved'))
} catch (error) {
diff --git a/apps/dav/src/components/ExampleContentDownloadButton.vue b/apps/dav/src/components/ExampleContentDownloadButton.vue
index d3ee793eddc..6ee13e057bd 100644
--- a/apps/dav/src/components/ExampleContentDownloadButton.vue
+++ b/apps/dav/src/components/ExampleContentDownloadButton.vue
@@ -26,13 +26,13 @@ export default {
name: 'ExampleContentDownloadButton',
components: {
NcButton,
- IconDownload
+ IconDownload,
},
props: {
href: {
type: String,
required: true,
- }
+ },
},
}
</script>
diff --git a/apps/dav/src/components/ExampleEventSettings.vue b/apps/dav/src/components/ExampleEventSettings.vue
index c7a90b71a4a..5d2053def50 100644
--- a/apps/dav/src/components/ExampleEventSettings.vue
+++ b/apps/dav/src/components/ExampleEventSettings.vue
@@ -47,7 +47,7 @@
type="file"
accept=".ics,text/calendar"
class="import-event-modal__file-picker"
- @change="selectFile" />
+ @change="selectFile">
<div class="import-event-modal__buttons">
<NcButton :disabled="uploading || !selectedFile"
type="primary"
diff --git a/apps/dav/src/settings-example-content.js b/apps/dav/src/settings-example-content.js
index ca0291ace4f..fdeba642a67 100644
--- a/apps/dav/src/settings-example-content.js
+++ b/apps/dav/src/settings-example-content.js
@@ -10,7 +10,7 @@ Vue.mixin({
methods: {
t: translate,
$t: translate,
- }
+ },
})
const View = Vue.extend(ExampleContentSettingsSection);
diff --git a/apps/dav/src/views/ExampleContentSettingsSection.vue b/apps/dav/src/views/ExampleContentSettingsSection.vue
index 5e65a1ba3b4..3ee2d9e8648 100644
--- a/apps/dav/src/views/ExampleContentSettingsSection.vue
+++ b/apps/dav/src/views/ExampleContentSettingsSection.vue
@@ -33,6 +33,6 @@ export default {
hasCalendarApp() {
return loadState('dav', 'calendarEnabled')
},
- }
+ },
}
</script>
diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js
index 2f593d271c4..f941b6bdab2 100644
--- a/apps/files/l10n/cs.js
+++ b/apps/files/l10n/cs.js
@@ -142,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Vytvořit novou složku",
"This name is already in use." : "Tento název už je využíván.",
"Create" : "Vytvořit",
+ "Files starting with a dot are hidden by default" : "Soubory, kterých názvy začínají tečkou, jsou ve výchozím stavu skryté",
"Fill template fields" : "Vyplňte kolonky šablony",
"Submitting fields …" : "Odesílání kolonek…",
"Submit" : "Odeslat",
@@ -213,6 +214,7 @@ OC.L10N.register(
"Warnings" : "Varování",
"Prevent warning dialogs from open or reenable them." : "Zabránit dialogům s varováními v otevírání nebo znovupovolení.",
"Show a warning dialog when changing a file extension." : "Při měnění přípony souboru zobrazit varovný dialog.",
+ "Show a warning dialog when deleting files." : "Před smazáním souborů zobrazit varovný dialog.",
"Keyboard shortcuts" : "Klávesové zkratky",
"Speed up your Files experience with these quick shortcuts." : "Zrychlete svůj dojem ze Souborů pomocí těchto rychlých zkratek.",
"Open the actions menu for a file" : "Otevřít nabídku akcí pro soubor",
diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json
index b565488a6e2..5faa81dca0b 100644
--- a/apps/files/l10n/cs.json
+++ b/apps/files/l10n/cs.json
@@ -140,6 +140,7 @@
"Create new folder" : "Vytvořit novou složku",
"This name is already in use." : "Tento název už je využíván.",
"Create" : "Vytvořit",
+ "Files starting with a dot are hidden by default" : "Soubory, kterých názvy začínají tečkou, jsou ve výchozím stavu skryté",
"Fill template fields" : "Vyplňte kolonky šablony",
"Submitting fields …" : "Odesílání kolonek…",
"Submit" : "Odeslat",
@@ -211,6 +212,7 @@
"Warnings" : "Varování",
"Prevent warning dialogs from open or reenable them." : "Zabránit dialogům s varováními v otevírání nebo znovupovolení.",
"Show a warning dialog when changing a file extension." : "Při měnění přípony souboru zobrazit varovný dialog.",
+ "Show a warning dialog when deleting files." : "Před smazáním souborů zobrazit varovný dialog.",
"Keyboard shortcuts" : "Klávesové zkratky",
"Speed up your Files experience with these quick shortcuts." : "Zrychlete svůj dojem ze Souborů pomocí těchto rychlých zkratek.",
"Open the actions menu for a file" : "Otevřít nabídku akcí pro soubor",
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index 086e763f4ab..c2cb142aac1 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -142,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Create new folder",
"This name is already in use." : "This name is already in use.",
"Create" : "Create",
+ "Files starting with a dot are hidden by default" : "Files starting with a dot are hidden by default",
"Fill template fields" : "Fill template fields",
"Submitting fields …" : "Submitting fields …",
"Submit" : "Submit",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index 33d8c73111f..69149e1a00d 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -140,6 +140,7 @@
"Create new folder" : "Create new folder",
"This name is already in use." : "This name is already in use.",
"Create" : "Create",
+ "Files starting with a dot are hidden by default" : "Files starting with a dot are hidden by default",
"Fill template fields" : "Fill template fields",
"Submitting fields …" : "Submitting fields …",
"Submit" : "Submit",
diff --git a/apps/files/l10n/ga.js b/apps/files/l10n/ga.js
index b872f9b4c48..d5a5e0fd8fc 100644
--- a/apps/files/l10n/ga.js
+++ b/apps/files/l10n/ga.js
@@ -129,6 +129,7 @@ OC.L10N.register(
"Search globally by filename …" : "Cuardaigh go domhanda de réir ainm comhaid …",
"Search here by filename …" : "Cuardaigh anseo de réir ainm comhaid …",
"Search scope options" : "Roghanna raon feidhme cuardaigh",
+ "Filter and search from this location" : "Scag agus déan cuardach ón suíomh seo",
"Search globally" : "Cuardaigh go domhanda",
"{usedQuotaByte} used" : "{usedQuotaByte} úsáidte",
"{used} of {quota} used" : "{used} de {quota} in úsáid",
@@ -141,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Cruthaigh fillteán nua",
"This name is already in use." : "Tá an t-ainm seo in úsáid cheana féin.",
"Create" : "Cruthaigh",
+ "Files starting with a dot are hidden by default" : "Bíonn comhaid a thosaíonn le ponc i bhfolach de réir réamhshocraithe",
"Fill template fields" : "Líon réimsí teimpléid",
"Submitting fields …" : "Réimsí á gcur isteach…",
"Submit" : "Cuir isteach",
@@ -212,6 +214,7 @@ OC.L10N.register(
"Warnings" : "Rabhaidh",
"Prevent warning dialogs from open or reenable them." : "Cosc a chur ar dialóga rabhaidh ó iad a oscailt nó iad a athchumasú.",
"Show a warning dialog when changing a file extension." : "Taispeáin dialóg rabhaidh nuair a athraítear síneadh comhad.",
+ "Show a warning dialog when deleting files." : "Taispeáin comhrá rabhaidh agus comhaid á scriosadh.",
"Keyboard shortcuts" : "Aicearraí méarchláir",
"Speed up your Files experience with these quick shortcuts." : "Déan do thaithí Comhaid a bhrostú leis na haicearraí tapa seo.",
"Open the actions menu for a file" : "Oscail an roghchlár gníomhartha le haghaidh comhad",
diff --git a/apps/files/l10n/ga.json b/apps/files/l10n/ga.json
index c71888d8c2b..8b01e76fc2e 100644
--- a/apps/files/l10n/ga.json
+++ b/apps/files/l10n/ga.json
@@ -127,6 +127,7 @@
"Search globally by filename …" : "Cuardaigh go domhanda de réir ainm comhaid …",
"Search here by filename …" : "Cuardaigh anseo de réir ainm comhaid …",
"Search scope options" : "Roghanna raon feidhme cuardaigh",
+ "Filter and search from this location" : "Scag agus déan cuardach ón suíomh seo",
"Search globally" : "Cuardaigh go domhanda",
"{usedQuotaByte} used" : "{usedQuotaByte} úsáidte",
"{used} of {quota} used" : "{used} de {quota} in úsáid",
@@ -139,6 +140,7 @@
"Create new folder" : "Cruthaigh fillteán nua",
"This name is already in use." : "Tá an t-ainm seo in úsáid cheana féin.",
"Create" : "Cruthaigh",
+ "Files starting with a dot are hidden by default" : "Bíonn comhaid a thosaíonn le ponc i bhfolach de réir réamhshocraithe",
"Fill template fields" : "Líon réimsí teimpléid",
"Submitting fields …" : "Réimsí á gcur isteach…",
"Submit" : "Cuir isteach",
@@ -210,6 +212,7 @@
"Warnings" : "Rabhaidh",
"Prevent warning dialogs from open or reenable them." : "Cosc a chur ar dialóga rabhaidh ó iad a oscailt nó iad a athchumasú.",
"Show a warning dialog when changing a file extension." : "Taispeáin dialóg rabhaidh nuair a athraítear síneadh comhad.",
+ "Show a warning dialog when deleting files." : "Taispeáin comhrá rabhaidh agus comhaid á scriosadh.",
"Keyboard shortcuts" : "Aicearraí méarchláir",
"Speed up your Files experience with these quick shortcuts." : "Déan do thaithí Comhaid a bhrostú leis na haicearraí tapa seo.",
"Open the actions menu for a file" : "Oscail an roghchlár gníomhartha le haghaidh comhad",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 39787e39664..f22d1227b9f 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -82,7 +82,7 @@ OC.L10N.register(
"Current directory path" : "Percorso della cartella corrente",
"Your have used your space quota and cannot upload files anymore" : "Hai esaurito la tua quota di spazio e non puoi più caricare file",
"You do not have permission to upload or create files here." : "Non hai l'autorizzazione per caricare o creare file qui.",
- "Drag and drop files here to upload" : "Trascina i file qui per caricarli",
+ "Drag and drop files here to upload" : "Trascina e rilascia i file qui per caricarli",
"Favorite" : "Preferito",
"Back" : "Indietro",
"Toggle selection for file \"{displayName}\"" : "Attiva/disattiva la selezione per il file \"{displayName}\"",
@@ -129,6 +129,7 @@ OC.L10N.register(
"Search globally by filename …" : "Cerca globalmente per nome file…",
"Search here by filename …" : "Cerca qui per nome file…",
"Search scope options" : "Opzioni nell'ambito di ricerca",
+ "Filter and search from this location" : "Filtra e cerca da questa posizione",
"Search globally" : "Cerca globalmente",
"{usedQuotaByte} used" : "{usedQuotaByte} usato",
"{used} of {quota} used" : "{used} di {quota} utilizzati",
@@ -141,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Crea una nuova cartella",
"This name is already in use." : "Questo nome è già utilizzato.",
"Create" : "Crea",
+ "Files starting with a dot are hidden by default" : "I file che iniziano con un punto sono nascosti per impostazione predefinita",
"Fill template fields" : "Compila i campi del modello",
"Submitting fields …" : "Invio dei campi …",
"Submit" : "Invia",
@@ -212,6 +214,7 @@ OC.L10N.register(
"Warnings" : "Avvertenze",
"Prevent warning dialogs from open or reenable them." : "Impedire l'apertura delle finestre di dialogo di avviso o riattivarle.",
"Show a warning dialog when changing a file extension." : "Mostra una finestra di dialogo di avviso quando si modifica l'estensione di un file.",
+ "Show a warning dialog when deleting files." : "Mostra un dialogo di avviso quando si cancellano dei file.",
"Keyboard shortcuts" : "Scorciatoie da tastiera",
"Speed up your Files experience with these quick shortcuts." : "Velocizza la tua esperienza con i File con queste rapide scorciatoie.",
"Open the actions menu for a file" : "Aprire il menu delle azioni per un file",
@@ -330,7 +333,7 @@ OC.L10N.register(
"New template folder" : "Nuova cartella dei modelli",
"In folder" : "Nella cartella",
"Search in folder: {folder}" : "Cerca nella cartella: {folder}",
- "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file eliminati",
+ "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file depositati",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "Il tuo browser non supporta l'API del file system. Le directory non verranno caricate",
"No files to upload" : "Nessun file da caricare",
"Unable to create the directory {directory}" : "Impossibile creare la directory {directory}",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 40edb4b3f9a..ced369a54d6 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -80,7 +80,7 @@
"Current directory path" : "Percorso della cartella corrente",
"Your have used your space quota and cannot upload files anymore" : "Hai esaurito la tua quota di spazio e non puoi più caricare file",
"You do not have permission to upload or create files here." : "Non hai l'autorizzazione per caricare o creare file qui.",
- "Drag and drop files here to upload" : "Trascina i file qui per caricarli",
+ "Drag and drop files here to upload" : "Trascina e rilascia i file qui per caricarli",
"Favorite" : "Preferito",
"Back" : "Indietro",
"Toggle selection for file \"{displayName}\"" : "Attiva/disattiva la selezione per il file \"{displayName}\"",
@@ -127,6 +127,7 @@
"Search globally by filename …" : "Cerca globalmente per nome file…",
"Search here by filename …" : "Cerca qui per nome file…",
"Search scope options" : "Opzioni nell'ambito di ricerca",
+ "Filter and search from this location" : "Filtra e cerca da questa posizione",
"Search globally" : "Cerca globalmente",
"{usedQuotaByte} used" : "{usedQuotaByte} usato",
"{used} of {quota} used" : "{used} di {quota} utilizzati",
@@ -139,6 +140,7 @@
"Create new folder" : "Crea una nuova cartella",
"This name is already in use." : "Questo nome è già utilizzato.",
"Create" : "Crea",
+ "Files starting with a dot are hidden by default" : "I file che iniziano con un punto sono nascosti per impostazione predefinita",
"Fill template fields" : "Compila i campi del modello",
"Submitting fields …" : "Invio dei campi …",
"Submit" : "Invia",
@@ -210,6 +212,7 @@
"Warnings" : "Avvertenze",
"Prevent warning dialogs from open or reenable them." : "Impedire l'apertura delle finestre di dialogo di avviso o riattivarle.",
"Show a warning dialog when changing a file extension." : "Mostra una finestra di dialogo di avviso quando si modifica l'estensione di un file.",
+ "Show a warning dialog when deleting files." : "Mostra un dialogo di avviso quando si cancellano dei file.",
"Keyboard shortcuts" : "Scorciatoie da tastiera",
"Speed up your Files experience with these quick shortcuts." : "Velocizza la tua esperienza con i File con queste rapide scorciatoie.",
"Open the actions menu for a file" : "Aprire il menu delle azioni per un file",
@@ -328,7 +331,7 @@
"New template folder" : "Nuova cartella dei modelli",
"In folder" : "Nella cartella",
"Search in folder: {folder}" : "Cerca nella cartella: {folder}",
- "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file eliminati",
+ "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file depositati",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "Il tuo browser non supporta l'API del file system. Le directory non verranno caricate",
"No files to upload" : "Nessun file da caricare",
"Unable to create the directory {directory}" : "Impossibile creare la directory {directory}",
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index 06851221df4..9dd4a3e3e1b 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -129,6 +129,7 @@ OC.L10N.register(
"Search globally by filename …" : "Dosya adına göre genel ara…",
"Search here by filename …" : "Dosya adına göre burada ara…",
"Search scope options" : "Arama kapsamı seçenekleri",
+ "Filter and search from this location" : "Süz ve bu konumdan ara",
"Search globally" : "Genel arama",
"{usedQuotaByte} used" : "{usedQuotaByte} kullanılmış",
"{used} of {quota} used" : "{used} / {quota} kullanılmış",
@@ -141,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Klasör ekle",
"This name is already in use." : "Bu ad zaten kullanılıyor.",
"Create" : "Ekle",
+ "Files starting with a dot are hidden by default" : "Bir nokta ile başlayan dosyalar varsayılan olarak gizlidir",
"Fill template fields" : "Kalıp alanlarını doldur",
"Submitting fields …" : "Alanlar gönderiliyor…",
"Submit" : "Gönder",
@@ -194,6 +196,7 @@ OC.L10N.register(
"Search for files" : "Dosya ara",
"Clipboard is not available" : "Pano kullanılamıyor",
"WebDAV URL copied to clipboard" : "WebDAV adresi panoya kopyalandı",
+ "Default view" : "Varsayılan görünüm",
"All files" : "Tüm dosyalar",
"Personal files" : "Kişisel dosyalar",
"Sort favorites first" : "Sık kullanılanlar üstte sıralansın",
@@ -211,6 +214,7 @@ OC.L10N.register(
"Warnings" : "Uyarılar",
"Prevent warning dialogs from open or reenable them." : "Uyarı pencerelerinin görüntülenmesini açın ya da kapatın.",
"Show a warning dialog when changing a file extension." : "Dosya uzantısı değiştirilirken uyarı penceresi görüntülensin.",
+ "Show a warning dialog when deleting files." : "Dosyalar silinirken uyarı penceresi görüntülensin.",
"Keyboard shortcuts" : "Kısayol tuşları",
"Speed up your Files experience with these quick shortcuts." : "Şu kısayol tuşlarını kullanarak Dosyalar deneyiminizi hızlandırabilirsiniz.",
"Open the actions menu for a file" : "Bir dosyanın işlemler menüsünü açar",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 4114ac386c4..b11cd89af20 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -127,6 +127,7 @@
"Search globally by filename …" : "Dosya adına göre genel ara…",
"Search here by filename …" : "Dosya adına göre burada ara…",
"Search scope options" : "Arama kapsamı seçenekleri",
+ "Filter and search from this location" : "Süz ve bu konumdan ara",
"Search globally" : "Genel arama",
"{usedQuotaByte} used" : "{usedQuotaByte} kullanılmış",
"{used} of {quota} used" : "{used} / {quota} kullanılmış",
@@ -139,6 +140,7 @@
"Create new folder" : "Klasör ekle",
"This name is already in use." : "Bu ad zaten kullanılıyor.",
"Create" : "Ekle",
+ "Files starting with a dot are hidden by default" : "Bir nokta ile başlayan dosyalar varsayılan olarak gizlidir",
"Fill template fields" : "Kalıp alanlarını doldur",
"Submitting fields …" : "Alanlar gönderiliyor…",
"Submit" : "Gönder",
@@ -192,6 +194,7 @@
"Search for files" : "Dosya ara",
"Clipboard is not available" : "Pano kullanılamıyor",
"WebDAV URL copied to clipboard" : "WebDAV adresi panoya kopyalandı",
+ "Default view" : "Varsayılan görünüm",
"All files" : "Tüm dosyalar",
"Personal files" : "Kişisel dosyalar",
"Sort favorites first" : "Sık kullanılanlar üstte sıralansın",
@@ -209,6 +212,7 @@
"Warnings" : "Uyarılar",
"Prevent warning dialogs from open or reenable them." : "Uyarı pencerelerinin görüntülenmesini açın ya da kapatın.",
"Show a warning dialog when changing a file extension." : "Dosya uzantısı değiştirilirken uyarı penceresi görüntülensin.",
+ "Show a warning dialog when deleting files." : "Dosyalar silinirken uyarı penceresi görüntülensin.",
"Keyboard shortcuts" : "Kısayol tuşları",
"Speed up your Files experience with these quick shortcuts." : "Şu kısayol tuşlarını kullanarak Dosyalar deneyiminizi hızlandırabilirsiniz.",
"Open the actions menu for a file" : "Bir dosyanın işlemler menüsünü açar",
diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js
index b8a096abf15..cc7b7f20c44 100644
--- a/apps/files/l10n/zh_HK.js
+++ b/apps/files/l10n/zh_HK.js
@@ -142,7 +142,7 @@ OC.L10N.register(
"Create new folder" : "新增資料夾",
"This name is already in use." : "這個用戶名稱已經有人使用了。",
"Create" : "創建",
- "Files starting with a dot are hidden by default" : "檔案名稱以點開頭的檔案預設隱藏",
+ "Files starting with a dot are hidden by default" : "以點開頭的檔案默認為隱藏檔案",
"Fill template fields" : "填寫模板欄位",
"Submitting fields …" : "正在遞交欄位 …",
"Submit" : "遞交",
diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json
index c423b29cece..a5cc0829163 100644
--- a/apps/files/l10n/zh_HK.json
+++ b/apps/files/l10n/zh_HK.json
@@ -140,7 +140,7 @@
"Create new folder" : "新增資料夾",
"This name is already in use." : "這個用戶名稱已經有人使用了。",
"Create" : "創建",
- "Files starting with a dot are hidden by default" : "檔案名稱以點開頭的檔案預設隱藏",
+ "Files starting with a dot are hidden by default" : "以點開頭的檔案默認為隱藏檔案",
"Fill template fields" : "填寫模板欄位",
"Submitting fields …" : "正在遞交欄位 …",
"Submit" : "遞交",
diff --git a/apps/files/src/actions/deleteAction.ts b/apps/files/src/actions/deleteAction.ts
index 63f7fd442c5..3e9e441a63c 100644
--- a/apps/files/src/actions/deleteAction.ts
+++ b/apps/files/src/actions/deleteAction.ts
@@ -10,7 +10,7 @@ import PQueue from 'p-queue'
import CloseSvg from '@mdi/svg/svg/close.svg?raw'
import NetworkOffSvg from '@mdi/svg/svg/network-off.svg?raw'
-import TrashCanSvg from '@mdi/svg/svg/trash-can.svg?raw'
+import TrashCanSvg from '@mdi/svg/svg/trash-can-outline.svg?raw'
import { TRASHBIN_VIEW_ID } from '../../../files_trashbin/src/files_views/trashbinView.ts'
import { askConfirmation, canDisconnectOnly, canUnshareOnly, deleteNode, displayName, shouldAskForConfirmation } from './deleteUtils.ts'
diff --git a/apps/files/src/actions/moveOrCopyAction.ts b/apps/files/src/actions/moveOrCopyAction.ts
index 724b65fa515..af68120bb1b 100644
--- a/apps/files/src/actions/moveOrCopyAction.ts
+++ b/apps/files/src/actions/moveOrCopyAction.ts
@@ -16,8 +16,8 @@ import { openConflictPicker, hasConflict } from '@nextcloud/upload'
import { basename, join } from 'path'
import Vue from 'vue'
-import CopyIconSvg from '@mdi/svg/svg/folder-multiple.svg?raw'
-import FolderMoveSvg from '@mdi/svg/svg/folder-move.svg?raw'
+import CopyIconSvg from '@mdi/svg/svg/folder-multiple-outline.svg?raw'
+import FolderMoveSvg from '@mdi/svg/svg/folder-move-outline.svg?raw'
import { MoveCopyAction, canCopy, canMove, getQueue } from './moveOrCopyActionUtils'
import { getContents } from '../services/Files'
diff --git a/apps/files/src/actions/renameAction.ts b/apps/files/src/actions/renameAction.ts
index d421d18c473..715ecb7563e 100644
--- a/apps/files/src/actions/renameAction.ts
+++ b/apps/files/src/actions/renameAction.ts
@@ -5,7 +5,7 @@
import { emit } from '@nextcloud/event-bus'
import { Permission, type Node, FileAction, View } from '@nextcloud/files'
import { translate as t } from '@nextcloud/l10n'
-import PencilSvg from '@mdi/svg/svg/pencil.svg?raw'
+import PencilSvg from '@mdi/svg/svg/pencil-outline.svg?raw'
import { getPinia } from '../store'
import { useFilesStore } from '../store/files'
import { dirname } from 'path'
diff --git a/apps/files/src/actions/viewInFolderAction.ts b/apps/files/src/actions/viewInFolderAction.ts
index eb145dc409f..b22393c1152 100644
--- a/apps/files/src/actions/viewInFolderAction.ts
+++ b/apps/files/src/actions/viewInFolderAction.ts
@@ -2,10 +2,13 @@
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-import { Node, FileType, Permission, View, FileAction } from '@nextcloud/files'
-import { translate as t } from '@nextcloud/l10n'
-import FolderMoveSvg from '@mdi/svg/svg/folder-move.svg?raw'
+import type { Node, View } from '@nextcloud/files'
+
import { isPublicShare } from '@nextcloud/sharing/public'
+import { FileAction, FileType, Permission } from '@nextcloud/files'
+import { t } from '@nextcloud/l10n'
+
+import FolderMoveSvg from '@mdi/svg/svg/folder-move-outline.svg?raw'
export const action = new FileAction({
id: 'view-in-folder',
diff --git a/apps/files/src/components/FileEntry/FileEntryPreview.vue b/apps/files/src/components/FileEntry/FileEntryPreview.vue
index 506677b49af..da160e68ed9 100644
--- a/apps/files/src/components/FileEntry/FileEntryPreview.vue
+++ b/apps/files/src/components/FileEntry/FileEntryPreview.vue
@@ -57,7 +57,7 @@ import { getSharingToken, isPublicShare } from '@nextcloud/sharing/public'
import { decode } from 'blurhash'
import { defineComponent } from 'vue'
-import AccountGroupIcon from 'vue-material-design-icons/AccountGroup.vue'
+import AccountGroupIcon from 'vue-material-design-icons/AccountGroupOutline.vue'
import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue'
import FileIcon from 'vue-material-design-icons/File.vue'
import FolderIcon from 'vue-material-design-icons/Folder.vue'
diff --git a/apps/files/src/components/FileListFilter/FileListFilterModified.vue b/apps/files/src/components/FileListFilter/FileListFilterModified.vue
index f3a968dd56e..3a843b2bc3e 100644
--- a/apps/files/src/components/FileListFilter/FileListFilterModified.vue
+++ b/apps/files/src/components/FileListFilter/FileListFilterModified.vue
@@ -7,7 +7,7 @@
:filter-name="t('files', 'Modified')"
@reset-filter="resetFilter">
<template #icon>
- <NcIconSvgWrapper :path="mdiCalendarRange" />
+ <NcIconSvgWrapper :path="mdiCalendarRangeOutline" />
</template>
<NcActionButton v-for="preset of timePresets"
:key="preset.id"
@@ -25,7 +25,7 @@
import type { PropType } from 'vue'
import type { ITimePreset } from '../../filters/ModifiedFilter.ts'
-import { mdiCalendarRange } from '@mdi/js'
+import { mdiCalendarRangeOutline } from '@mdi/js'
import { translate as t } from '@nextcloud/l10n'
import { defineComponent } from 'vue'
@@ -50,7 +50,7 @@ export default defineComponent({
setup() {
return {
// icons used in template
- mdiCalendarRange,
+ mdiCalendarRangeOutline,
}
},
diff --git a/apps/files/src/components/NavigationQuota.vue b/apps/files/src/components/NavigationQuota.vue
index fd10af1c495..46c8e5c9af4 100644
--- a/apps/files/src/components/NavigationQuota.vue
+++ b/apps/files/src/components/NavigationQuota.vue
@@ -33,7 +33,7 @@ import { subscribe } from '@nextcloud/event-bus'
import { translate } from '@nextcloud/l10n'
import axios from '@nextcloud/axios'
-import ChartPie from 'vue-material-design-icons/ChartPie.vue'
+import ChartPie from 'vue-material-design-icons/ChartPieOutline.vue'
import NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'
import NcProgressBar from '@nextcloud/vue/components/NcProgressBar'
diff --git a/apps/files/src/newMenu/newFolder.ts b/apps/files/src/newMenu/newFolder.ts
index 9a8badb4eb7..bc82d389e54 100644
--- a/apps/files/src/newMenu/newFolder.ts
+++ b/apps/files/src/newMenu/newFolder.ts
@@ -12,7 +12,7 @@ import { showError, showInfo, showSuccess } from '@nextcloud/dialogs'
import { translate as t } from '@nextcloud/l10n'
import axios from '@nextcloud/axios'
-import FolderPlusSvg from '@mdi/svg/svg/folder-plus.svg?raw'
+import FolderPlusSvg from '@mdi/svg/svg/folder-plus-outline.svg?raw'
import { newNodeName } from '../utils/newNodeDialog'
import logger from '../logger'
@@ -43,8 +43,11 @@ export const entry = {
id: 'newFolder',
displayName: t('files', 'New folder'),
enabled: (context: Folder) => Boolean(context.permissions & Permission.CREATE) && Boolean(context.permissions & Permission.READ),
- iconSvgInline: FolderPlusSvg,
+
+ // Make the svg icon color match the primary element color
+ iconSvgInline: FolderPlusSvg.replace(/viewBox/gi, 'style="color: var(--color-primary-element)" viewBox'),
order: 0,
+
async handler(context: Folder, content: Node[]) {
const name = await newNodeName(t('files', 'New folder'), content)
if (name === null) {
diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue
index 15a7f93ddf0..3f993e24958 100644
--- a/apps/files/src/views/FilesList.vue
+++ b/apps/files/src/views/FilesList.vue
@@ -176,12 +176,12 @@ import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
-import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue'
+import AccountPlusIcon from 'vue-material-design-icons/AccountPlusOutline.vue'
import IconAlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue'
import IconReload from 'vue-material-design-icons/Reload.vue'
import LinkIcon from 'vue-material-design-icons/Link.vue'
import ListViewIcon from 'vue-material-design-icons/FormatListBulletedSquare.vue'
-import ViewGridIcon from 'vue-material-design-icons/ViewGrid.vue'
+import ViewGridIcon from 'vue-material-design-icons/ViewGridOutline.vue'
import { action as sidebarAction } from '../actions/sidebarAction.ts'
import { useFileListWidth } from '../composables/useFileListWidth.ts'
diff --git a/apps/files/src/views/Navigation.vue b/apps/files/src/views/Navigation.vue
index c424a0d74b8..0f3c3647c6e 100644
--- a/apps/files/src/views/Navigation.vue
+++ b/apps/files/src/views/Navigation.vue
@@ -47,7 +47,7 @@ import { getNavigation } from '@nextcloud/files'
import { t, getCanonicalLocale, getLanguage } from '@nextcloud/l10n'
import { defineComponent } from 'vue'
-import IconCog from 'vue-material-design-icons/Cog.vue'
+import IconCog from 'vue-material-design-icons/CogOutline.vue'
import NcAppNavigation from '@nextcloud/vue/components/NcAppNavigation'
import NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'
import NcAppNavigationList from '@nextcloud/vue/components/NcAppNavigationList'
diff --git a/apps/files/src/views/favorites.spec.ts b/apps/files/src/views/favorites.spec.ts
index 64c3df0500a..e73279f2b31 100644
--- a/apps/files/src/views/favorites.spec.ts
+++ b/apps/files/src/views/favorites.spec.ts
@@ -7,6 +7,7 @@
import type { Folder as CFolder, Navigation } from '@nextcloud/files'
import * as filesUtils from '@nextcloud/files'
+import * as filesDavUtils from '@nextcloud/files/dav'
import { CancelablePromise } from 'cancelable-promise'
import { basename } from 'path'
import { beforeEach, describe, expect, test, vi } from 'vitest'
@@ -43,7 +44,7 @@ describe('Favorites view definition', () => {
test('Default empty favorite view', async () => {
vi.spyOn(eventBus, 'subscribe')
- vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([]))
+ vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([]))
vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] }))
await registerFavoritesView()
@@ -89,8 +90,14 @@ describe('Favorites view definition', () => {
source: 'http://nextcloud.local/remote.php/dav/files/admin/foo/bar',
owner: 'admin',
}),
+ new Folder({
+ id: 4,
+ root: '/files/admin',
+ source: 'http://nextcloud.local/remote.php/dav/files/admin/foo/bar/yabadaba',
+ owner: 'admin',
+ }),
]
- vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve(favoriteFolders))
+ vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve(favoriteFolders))
vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] }))
await registerFavoritesView()
@@ -98,9 +105,12 @@ describe('Favorites view definition', () => {
const favoriteFoldersViews = Navigation.views.filter(view => view.parent === 'favorites')
// one main view and 3 children
- expect(Navigation.views.length).toBe(4)
+ expect(Navigation.views.length).toBe(5)
expect(favoritesView).toBeDefined()
- expect(favoriteFoldersViews.length).toBe(3)
+ expect(favoriteFoldersViews.length).toBe(4)
+
+ // Sorted by basename: bar, bar, foo
+ const expectedOrder = [2, 0, 1, 3]
favoriteFolders.forEach((folder, index) => {
const favoriteView = favoriteFoldersViews[index]
@@ -108,7 +118,7 @@ describe('Favorites view definition', () => {
expect(favoriteView?.id).toBeDefined()
expect(favoriteView?.name).toBe(basename(folder.path))
expect(favoriteView?.icon).toMatch(/<svg.+<\/svg>/)
- expect(favoriteView?.order).toBe(index)
+ expect(favoriteView?.order).toBe(expectedOrder[index])
expect(favoriteView?.params).toStrictEqual({
dir: folder.path,
fileid: String(folder.fileid),
@@ -132,7 +142,7 @@ describe('Dynamic update of favorite folders', () => {
test('Add a favorite folder creates a new entry in the navigation', async () => {
vi.spyOn(eventBus, 'emit')
- vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([]))
+ vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([]))
vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] }))
await registerFavoritesView()
@@ -160,7 +170,7 @@ describe('Dynamic update of favorite folders', () => {
test('Remove a favorite folder remove the entry from the navigation column', async () => {
vi.spyOn(eventBus, 'emit')
- vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([
+ vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([
new Folder({
id: 42,
root: '/files/admin',
@@ -211,7 +221,7 @@ describe('Dynamic update of favorite folders', () => {
test('Renaming a favorite folder updates the navigation', async () => {
vi.spyOn(eventBus, 'emit')
- vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([]))
+ vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([]))
vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] }))
await registerFavoritesView()
diff --git a/apps/files/src/views/favorites.ts b/apps/files/src/views/favorites.ts
index cadc7704e14..cac776507ef 100644
--- a/apps/files/src/views/favorites.ts
+++ b/apps/files/src/views/favorites.ts
@@ -4,13 +4,15 @@
*/
import type { Folder, Node } from '@nextcloud/files'
+import { FileType, View, getNavigation } from '@nextcloud/files'
+import { getCanonicalLocale, getLanguage, t } from '@nextcloud/l10n'
+import { getFavoriteNodes } from '@nextcloud/files/dav'
import { subscribe } from '@nextcloud/event-bus'
-import { FileType, View, getFavoriteNodes, getNavigation } from '@nextcloud/files'
-import { getLanguage, translate as t } from '@nextcloud/l10n'
-import { client } from '../services/WebdavClient.ts'
+
import FolderSvg from '@mdi/svg/svg/folder.svg?raw'
-import StarSvg from '@mdi/svg/svg/star.svg?raw'
+import StarSvg from '@mdi/svg/svg/star-outline.svg?raw'
+import { client } from '../services/WebdavClient.ts'
import { getContents } from '../services/Favorites'
import { hashCode } from '../utils/hashUtils'
import logger from '../logger'
@@ -118,7 +120,7 @@ export const registerFavoritesView = async () => {
* update the order property of the existing views
*/
const updateAndSortViews = function() {
- favoriteFolders.sort((a, b) => a.path.localeCompare(b.path, getLanguage(), { ignorePunctuation: true }))
+ favoriteFolders.sort((a, b) => a.basename.localeCompare(b.basename, [getLanguage(), getCanonicalLocale()], { ignorePunctuation: true, numeric: true, usage: 'sort' }))
favoriteFolders.forEach((folder, index) => {
const view = favoriteFoldersViews.find((view) => view.id === generateIdFromPath(folder.path))
if (view) {
@@ -176,4 +178,6 @@ export const registerFavoritesView = async () => {
removePathFromFavorites(favoriteFolder.path)
addToFavorites(node)
}
+
+ updateAndSortViews()
}
diff --git a/apps/files/src/views/files.ts b/apps/files/src/views/files.ts
index 95450f0d71a..a94aab0f14b 100644
--- a/apps/files/src/views/files.ts
+++ b/apps/files/src/views/files.ts
@@ -10,7 +10,7 @@ import { getContents } from '../services/Files.ts'
import { useActiveStore } from '../store/active.ts'
import { defaultView } from '../utils/filesViews.ts'
-import FolderSvg from '@mdi/svg/svg/folder.svg?raw'
+import FolderSvg from '@mdi/svg/svg/folder-outline.svg?raw'
export const VIEW_ID = 'files'
diff --git a/apps/files/src/views/folderTree.ts b/apps/files/src/views/folderTree.ts
index c38e4721316..bdff1659080 100644
--- a/apps/files/src/views/folderTree.ts
+++ b/apps/files/src/views/folderTree.ts
@@ -13,7 +13,7 @@ import { isSamePath } from '@nextcloud/paths'
import { loadState } from '@nextcloud/initial-state'
import FolderSvg from '@mdi/svg/svg/folder.svg?raw'
-import FolderMultipleSvg from '@mdi/svg/svg/folder-multiple.svg?raw'
+import FolderMultipleSvg from '@mdi/svg/svg/folder-multiple-outline.svg?raw'
import {
folderTreeId,
diff --git a/apps/files/src/views/personal-files.ts b/apps/files/src/views/personal-files.ts
index 36888eb7ee0..241582057d1 100644
--- a/apps/files/src/views/personal-files.ts
+++ b/apps/files/src/views/personal-files.ts
@@ -8,7 +8,7 @@ import { View, getNavigation } from '@nextcloud/files'
import { getContents } from '../services/PersonalFiles.ts'
import { defaultView, hasPersonalFilesView } from '../utils/filesViews.ts'
-import AccountIcon from '@mdi/svg/svg/account.svg?raw'
+import AccountIcon from '@mdi/svg/svg/account-outline.svg?raw'
export const VIEW_ID = 'personal'
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 23f0a3b4a28..fa7d330d86e 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -254,7 +254,7 @@ OC.L10N.register(
"Search for internal recipients" : "Cerca destinatari interni",
"Note from" : "Nota da",
"Note:" : "Nota:",
- "File drop" : "Elimina file",
+ "File drop" : "Deposita file",
"Upload files to {foldername}." : "Carica i file su{foldername}.",
"By uploading files, you agree to the terms of service." : "Caricando i file accetti i termini del servizio.",
"Successfully uploaded files" : "File caricati correttamente",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index fc84fa187f2..77427218f18 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -252,7 +252,7 @@
"Search for internal recipients" : "Cerca destinatari interni",
"Note from" : "Nota da",
"Note:" : "Nota:",
- "File drop" : "Elimina file",
+ "File drop" : "Deposita file",
"Upload files to {foldername}." : "Carica i file su{foldername}.",
"By uploading files, you agree to the terms of service." : "Caricando i file accetti i termini del servizio.",
"Successfully uploaded files" : "File caricati correttamente",
diff --git a/apps/files_sharing/src/components/FileListFilterAccount.vue b/apps/files_sharing/src/components/FileListFilterAccount.vue
index 46c847e7b19..150516e139b 100644
--- a/apps/files_sharing/src/components/FileListFilterAccount.vue
+++ b/apps/files_sharing/src/components/FileListFilterAccount.vue
@@ -8,7 +8,7 @@
:filter-name="t('files_sharing', 'People')"
@reset-filter="resetFilter">
<template #icon>
- <NcIconSvgWrapper :path="mdiAccountMultiple" />
+ <NcIconSvgWrapper :path="mdiAccountMultipleOutline" />
</template>
<NcActionInput v-if="availableAccounts.length > 1"
:label="t('files_sharing', 'Filter accounts')"
@@ -39,7 +39,7 @@
import type { IAccountData } from '../files_filters/AccountFilter.ts'
import { translate as t } from '@nextcloud/l10n'
-import { mdiAccountMultiple } from '@mdi/js'
+import { mdiAccountMultipleOutline } from '@mdi/js'
import { computed, ref, watch } from 'vue'
import FileListFilter from '../../../files/src/components/FileListFilter/FileListFilter.vue'
diff --git a/apps/files_sharing/src/components/NewFileRequestDialog/NewFileRequestDialogIntro.vue b/apps/files_sharing/src/components/NewFileRequestDialog/NewFileRequestDialogIntro.vue
index 2d4d8eafa2b..5ac60c37e29 100644
--- a/apps/files_sharing/src/components/NewFileRequestDialog/NewFileRequestDialogIntro.vue
+++ b/apps/files_sharing/src/components/NewFileRequestDialog/NewFileRequestDialogIntro.vue
@@ -78,7 +78,7 @@ import { getFilePickerBuilder } from '@nextcloud/dialogs'
import { t } from '@nextcloud/l10n'
import IconFolder from 'vue-material-design-icons/Folder.vue'
-import IconInfo from 'vue-material-design-icons/Information.vue'
+import IconInfo from 'vue-material-design-icons/InformationOutline.vue'
import IconLock from 'vue-material-design-icons/Lock.vue'
import NcTextArea from '@nextcloud/vue/components/NcTextArea'
import NcTextField from '@nextcloud/vue/components/NcTextField'
diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue
index 702b876306f..6a456fa0a15 100644
--- a/apps/files_sharing/src/components/SharingEntryLink.vue
+++ b/apps/files_sharing/src/components/SharingEntryLink.vue
@@ -74,10 +74,10 @@
{{ config.enforcePasswordForPublicLink ? t('files_sharing', 'Password protection (enforced)') : t('files_sharing', 'Password protection') }}
</NcActionCheckbox>
- <NcActionInput v-if="pendingEnforcedPassword || share.password"
+ <NcActionInput v-if="pendingEnforcedPassword || isPasswordProtected"
class="share-link-password"
:label="t('files_sharing', 'Enter a password')"
- :value.sync="share.password"
+ :value.sync="share.newPassword"
:disabled="saving"
:required="config.enableLinkPasswordByDefault || config.enforcePasswordForPublicLink"
:minlength="isPasswordPolicyEnabled && config.passwordPolicy.minLength"
@@ -115,7 +115,8 @@
</template>
</NcActionInput>
- <NcActionButton @click.prevent.stop="onNewLinkShare(true)">
+ <NcActionButton :disabled="pendingEnforcedPassword && !share.newPassword"
+ @click.prevent.stop="onNewLinkShare(true)">
<template #icon>
<CheckIcon :size="20" />
</template>
@@ -242,10 +243,10 @@ import NcAvatar from '@nextcloud/vue/components/NcAvatar'
import NcDialog from '@nextcloud/vue/components/NcDialog'
import Tune from 'vue-material-design-icons/Tune.vue'
-import IconCalendarBlank from 'vue-material-design-icons/CalendarBlank.vue'
+import IconCalendarBlank from 'vue-material-design-icons/CalendarBlankOutline.vue'
import IconQr from 'vue-material-design-icons/Qrcode.vue'
import ErrorIcon from 'vue-material-design-icons/Exclamation.vue'
-import LockIcon from 'vue-material-design-icons/Lock.vue'
+import LockIcon from 'vue-material-design-icons/LockOutline.vue'
import CheckIcon from 'vue-material-design-icons/CheckBold.vue'
import ClipboardIcon from 'vue-material-design-icons/ContentCopy.vue'
import CloseIcon from 'vue-material-design-icons/Close.vue'
@@ -646,6 +647,7 @@ export default {
// create share & close menu
const share = new Share(shareDefaults)
+ share.newPassword = share.password
const component = await new Promise(resolve => {
this.$emit('add:share', share, resolve)
})
@@ -838,7 +840,7 @@ export default {
*/
onPasswordSubmit() {
if (this.hasUnsavedPassword) {
- this.share.password = this.share.newPassword.trim()
+ this.share.newPassword = this.share.newPassword.trim()
this.queueUpdate('password')
}
},
@@ -853,7 +855,7 @@ export default {
*/
onPasswordProtectedByTalkChange() {
if (this.hasUnsavedPassword) {
- this.share.password = this.share.newPassword.trim()
+ this.share.newPassword = this.share.newPassword.trim()
}
this.queueUpdate('sendPasswordByTalk', 'password')
diff --git a/apps/files_sharing/src/components/SharingEntryQuickShareSelect.vue b/apps/files_sharing/src/components/SharingEntryQuickShareSelect.vue
index 041841201d0..102eea63cb6 100644
--- a/apps/files_sharing/src/components/SharingEntryQuickShareSelect.vue
+++ b/apps/files_sharing/src/components/SharingEntryQuickShareSelect.vue
@@ -36,7 +36,7 @@ import ShareDetails from '../mixins/ShareDetails.js'
import NcActions from '@nextcloud/vue/components/NcActions'
import NcActionButton from '@nextcloud/vue/components/NcActionButton'
import IconEyeOutline from 'vue-material-design-icons/EyeOutline.vue'
-import IconPencil from 'vue-material-design-icons/Pencil.vue'
+import IconPencil from 'vue-material-design-icons/PencilOutline.vue'
import IconFileUpload from 'vue-material-design-icons/FileUpload.vue'
import IconTune from 'vue-material-design-icons/Tune.vue'
diff --git a/apps/files_sharing/src/files_actions/sharingStatusAction.ts b/apps/files_sharing/src/files_actions/sharingStatusAction.ts
index 75fe7d54096..2dfd8467c5b 100644
--- a/apps/files_sharing/src/files_actions/sharingStatusAction.ts
+++ b/apps/files_sharing/src/files_actions/sharingStatusAction.ts
@@ -8,8 +8,8 @@ import { translate as t } from '@nextcloud/l10n'
import { ShareType } from '@nextcloud/sharing'
import { isPublicShare } from '@nextcloud/sharing/public'
-import AccountGroupSvg from '@mdi/svg/svg/account-group.svg?raw'
-import AccountPlusSvg from '@mdi/svg/svg/account-plus.svg?raw'
+import AccountGroupSvg from '@mdi/svg/svg/account-group-outline.svg?raw'
+import AccountPlusSvg from '@mdi/svg/svg/account-plus-outline.svg?raw'
import LinkSvg from '@mdi/svg/svg/link.svg?raw'
import CircleSvg from '../../../../core/img/apps/circles.svg?raw'
diff --git a/apps/files_sharing/src/files_newMenu/newFileRequest.ts b/apps/files_sharing/src/files_newMenu/newFileRequest.ts
index f7c5cc4057a..1d58e3552a2 100644
--- a/apps/files_sharing/src/files_newMenu/newFileRequest.ts
+++ b/apps/files_sharing/src/files_newMenu/newFileRequest.ts
@@ -7,7 +7,7 @@ import type { Entry, Folder, Node } from '@nextcloud/files'
import { defineAsyncComponent } from 'vue'
import { spawnDialog } from '@nextcloud/dialogs'
import { translate as t } from '@nextcloud/l10n'
-import FileUploadSvg from '@mdi/svg/svg/file-upload.svg?raw'
+import FileUploadSvg from '@mdi/svg/svg/file-upload-outline.svg?raw'
import Config from '../services/ConfigService'
import { isPublicShare } from '@nextcloud/sharing/public'
diff --git a/apps/files_sharing/src/files_views/shares.ts b/apps/files_sharing/src/files_views/shares.ts
index 297fd4796fd..fd5e908638c 100644
--- a/apps/files_sharing/src/files_views/shares.ts
+++ b/apps/files_sharing/src/files_views/shares.ts
@@ -6,11 +6,11 @@ import { translate as t } from '@nextcloud/l10n'
import { View, getNavigation } from '@nextcloud/files'
import { ShareType } from '@nextcloud/sharing'
import AccountClockSvg from '@mdi/svg/svg/account-clock.svg?raw'
-import AccountGroupSvg from '@mdi/svg/svg/account-group.svg?raw'
-import AccountPlusSvg from '@mdi/svg/svg/account-plus.svg?raw'
+import AccountGroupSvg from '@mdi/svg/svg/account-group-outline.svg?raw'
+import AccountPlusSvg from '@mdi/svg/svg/account-plus-outline.svg?raw'
import AccountSvg from '@mdi/svg/svg/account.svg?raw'
import DeleteSvg from '@mdi/svg/svg/delete.svg?raw'
-import FileUploadSvg from '@mdi/svg/svg/file-upload.svg?raw'
+import FileUploadSvg from '@mdi/svg/svg/file-upload-outline.svg?raw'
import LinkSvg from '@mdi/svg/svg/link.svg?raw'
import { getContents, isFileRequest } from '../services/SharingService'
diff --git a/apps/files_sharing/src/mixins/SharesMixin.js b/apps/files_sharing/src/mixins/SharesMixin.js
index c5bad91314e..a461da56d85 100644
--- a/apps/files_sharing/src/mixins/SharesMixin.js
+++ b/apps/files_sharing/src/mixins/SharesMixin.js
@@ -165,12 +165,12 @@ export default {
isPasswordProtected: {
get() {
return this.config.enforcePasswordForPublicLink
- || !!this.share.password
+ || this.share.password !== ''
+ || this.share.newPassword !== undefined
},
async set(enabled) {
if (enabled) {
- this.share.password = await GeneratePassword(true)
- this.$set(this.share, 'newPassword', this.share.password)
+ this.$set(this.share, 'newPassword', await GeneratePassword(true))
} else {
this.share.password = ''
this.$delete(this.share, 'newPassword')
@@ -272,7 +272,7 @@ export default {
this.loading = true
this.open = false
await this.deleteShare(this.share.id)
- console.debug('Share deleted', this.share.id)
+ logger.debug('Share deleted', { shareId: this.share.id })
const message = this.share.itemType === 'file'
? t('files_sharing', 'File "{path}" has been unshared', { path: this.share.path })
: t('files_sharing', 'Folder "{path}" has been unshared', { path: this.share.path })
@@ -303,7 +303,12 @@ export default {
const properties = {}
// force value to string because that is what our
// share api controller accepts
- propertyNames.forEach(name => {
+ for (const name of propertyNames) {
+ if (name === 'password') {
+ properties[name] = this.share.newPassword ?? this.share.password
+ continue
+ }
+
if (this.share[name] === null || this.share[name] === undefined) {
properties[name] = ''
} else if ((typeof this.share[name]) === 'object') {
@@ -311,7 +316,7 @@ export default {
} else {
properties[name] = this.share[name].toString()
}
- })
+ }
return this.updateQueue.add(async () => {
this.saving = true
@@ -319,8 +324,9 @@ export default {
try {
const updatedShare = await this.updateShare(this.share.id, properties)
- if (propertyNames.indexOf('password') >= 0) {
+ if (propertyNames.includes('password')) {
// reset password state after sync
+ this.share.password = this.share.newPassword ?? ''
this.$delete(this.share, 'newPassword')
// updates password expiration time after sync
@@ -328,14 +334,18 @@ export default {
}
// clear any previous errors
- this.$delete(this.errors, propertyNames[0])
+ for (const property of propertyNames) {
+ this.$delete(this.errors, property)
+ }
showSuccess(this.updateSuccessMessage(propertyNames))
} catch (error) {
logger.error('Could not update share', { error, share: this.share, propertyNames })
const { message } = error
if (message && message !== '') {
- this.onSyncError(propertyNames[0], message)
+ for (const property of propertyNames) {
+ this.onSyncError(property, message)
+ }
showError(message)
} else {
// We do not have information what happened, but we should still inform the user
@@ -384,6 +394,13 @@ export default {
* @param {string} message the error message
*/
onSyncError(property, message) {
+ if (property === 'password' && this.share.newPassword) {
+ if (this.share.newPassword === this.share.password) {
+ this.share.password = ''
+ }
+ this.$delete(this.share, 'newPassword')
+ }
+
// re-open menu if closed
this.open = true
switch (property) {
diff --git a/apps/files_sharing/src/views/FilesViewFileDropEmptyContent.vue b/apps/files_sharing/src/views/FilesViewFileDropEmptyContent.vue
index 33fec9af028..dac22748d8a 100644
--- a/apps/files_sharing/src/views/FilesViewFileDropEmptyContent.vue
+++ b/apps/files_sharing/src/views/FilesViewFileDropEmptyContent.vue
@@ -68,7 +68,7 @@ import NcDialog from '@nextcloud/vue/components/NcDialog'
import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
-import svgCloudUpload from '@mdi/svg/svg/cloud-upload.svg?raw'
+import svgCloudUpload from '@mdi/svg/svg/cloud-upload-outline.svg?raw'
defineProps<{
foldername: string
diff --git a/apps/files_sharing/src/views/SharingDetailsTab.vue b/apps/files_sharing/src/views/SharingDetailsTab.vue
index f1fb78e548b..ee902a24c8a 100644
--- a/apps/files_sharing/src/views/SharingDetailsTab.vue
+++ b/apps/files_sharing/src/views/SharingDetailsTab.vue
@@ -128,7 +128,7 @@
</NcCheckboxRadioSwitch>
<NcPasswordField v-if="isPasswordProtected"
autocomplete="new-password"
- :value="hasUnsavedPassword ? share.newPassword : ''"
+ :value="share.newPassword ?? ''"
:error="passwordError"
:helper-text="errorPasswordLabel || passwordHint"
:required="isPasswordEnforced && isNewShare"
@@ -281,7 +281,7 @@ import NcTextArea from '@nextcloud/vue/components/NcTextArea'
import CircleIcon from 'vue-material-design-icons/CircleOutline.vue'
import CloseIcon from 'vue-material-design-icons/Close.vue'
-import EditIcon from 'vue-material-design-icons/Pencil.vue'
+import EditIcon from 'vue-material-design-icons/PencilOutline.vue'
import EmailIcon from 'vue-material-design-icons/Email.vue'
import LinkIcon from 'vue-material-design-icons/Link.vue'
import GroupIcon from 'vue-material-design-icons/AccountGroup.vue'
@@ -872,7 +872,6 @@ export default {
if (this.isNewShare) {
if ((this.config.enableLinkPasswordByDefault || this.isPasswordEnforced) && this.isPublicShare) {
this.$set(this.share, 'newPassword', await GeneratePassword(true))
- this.$set(this.share, 'password', this.share.newPassword)
this.advancedSectionAccordionExpanded = true
}
/* Set default expiration dates if configured */
@@ -973,10 +972,7 @@ export default {
this.share.note = ''
}
if (this.isPasswordProtected) {
- if (this.hasUnsavedPassword && this.isValidShareAttribute(this.share.newPassword)) {
- this.share.password = this.share.newPassword
- this.$delete(this.share, 'newPassword')
- } else if (this.isPasswordEnforced && this.isNewShare && !this.isValidShareAttribute(this.share.password)) {
+ if (this.isPasswordEnforced && this.isNewShare && !this.isValidShareAttribute(this.share.password)) {
this.passwordError = true
}
} else {
@@ -1000,7 +996,7 @@ export default {
incomingShare.expireDate = this.hasExpirationDate ? this.share.expireDate : ''
if (this.isPasswordProtected) {
- incomingShare.password = this.share.password
+ incomingShare.password = this.share.newPassword
}
let share
@@ -1032,9 +1028,8 @@ export default {
this.$emit('add:share', this.share)
} else {
// Let's update after creation as some attrs are only available after creation
+ await this.queueUpdate(...permissionsAndAttributes)
this.$emit('update:share', this.share)
- emit('update:share', this.share)
- this.queueUpdate(...permissionsAndAttributes)
}
await this.getNode()
@@ -1111,10 +1106,6 @@ export default {
* "sendPasswordByTalk".
*/
onPasswordProtectedByTalkChange() {
- if (this.hasUnsavedPassword) {
- this.share.password = this.share.newPassword.trim()
- }
-
this.queueUpdate('sendPasswordByTalk', 'password')
},
isValidShareAttribute(value) {
diff --git a/apps/files_sharing/src/views/SharingTab.vue b/apps/files_sharing/src/views/SharingTab.vue
index 82a11dea2e0..e56201f6e06 100644
--- a/apps/files_sharing/src/views/SharingTab.vue
+++ b/apps/files_sharing/src/views/SharingTab.vue
@@ -164,7 +164,7 @@ import { generateOcsUrl } from '@nextcloud/router'
import { CollectionList } from 'nextcloud-vue-collections'
import { ShareType } from '@nextcloud/sharing'
-import InfoIcon from 'vue-material-design-icons/Information.vue'
+import InfoIcon from 'vue-material-design-icons/InformationOutline.vue'
import NcPopover from '@nextcloud/vue/components/NcPopover'
import axios from '@nextcloud/axios'
diff --git a/apps/files_trashbin/src/files_views/trashbinView.ts b/apps/files_trashbin/src/files_views/trashbinView.ts
index 5b547071cc7..f55c6b71595 100644
--- a/apps/files_trashbin/src/files_views/trashbinView.ts
+++ b/apps/files_trashbin/src/files_views/trashbinView.ts
@@ -7,7 +7,7 @@ import { t } from '@nextcloud/l10n'
import { deleted, deletedBy, originalLocation } from './columns.ts'
import { getContents } from '../services/trashbin.ts'
-import svgDelete from '@mdi/svg/svg/delete.svg?raw'
+import svgDelete from '@mdi/svg/svg/delete-outline.svg?raw'
export const TRASHBIN_VIEW_ID = 'trashbin'
diff --git a/apps/files_versions/src/components/Version.vue b/apps/files_versions/src/components/Version.vue
index 275f1d0ddbf..dc36e4134f9 100644
--- a/apps/files_versions/src/components/Version.vue
+++ b/apps/files_versions/src/components/Version.vue
@@ -137,7 +137,7 @@ import Delete from 'vue-material-design-icons/Delete.vue'
import Download from 'vue-material-design-icons/Download.vue'
import FileCompare from 'vue-material-design-icons/FileCompare.vue'
import ImageOffOutline from 'vue-material-design-icons/ImageOffOutline.vue'
-import Pencil from 'vue-material-design-icons/Pencil.vue'
+import Pencil from 'vue-material-design-icons/PencilOutline.vue'
import NcActionButton from '@nextcloud/vue/components/NcActionButton'
import NcActionLink from '@nextcloud/vue/components/NcActionLink'
diff --git a/apps/oauth2/src/components/OAuthItem.vue b/apps/oauth2/src/components/OAuthItem.vue
index 3341a86168a..5a8f1556203 100644
--- a/apps/oauth2/src/components/OAuthItem.vue
+++ b/apps/oauth2/src/components/OAuthItem.vue
@@ -35,7 +35,7 @@
<script>
-import Delete from 'vue-material-design-icons/Delete.vue'
+import Delete from 'vue-material-design-icons/DeleteOutline.vue'
import EyeOutline from 'vue-material-design-icons/EyeOutline.vue'
import NcButton from '@nextcloud/vue/components/NcButton'
diff --git a/apps/profile/l10n/be.js b/apps/profile/l10n/be.js
new file mode 100644
index 00000000000..40762e2b51c
--- /dev/null
+++ b/apps/profile/l10n/be.js
@@ -0,0 +1,12 @@
+OC.L10N.register(
+ "profile",
+ {
+ "Profile" : "Профіль",
+ "You have not added any info yet" : "Вы пакуль не дадалі ніякай інфармацыі",
+ "{user} has not added any info yet" : "{user} пакуль не дадаў(-ла) ніякай інфармацыі",
+ "Edit Profile" : "Рэдагаваць профіль",
+ "Profile not found" : "Профіль не знойдзены",
+ "The profile does not exist." : "Профіль не існуе.",
+ "Back to %s" : "Назад да %s"
+},
+"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/profile/l10n/be.json b/apps/profile/l10n/be.json
new file mode 100644
index 00000000000..16101d03b70
--- /dev/null
+++ b/apps/profile/l10n/be.json
@@ -0,0 +1,10 @@
+{ "translations": {
+ "Profile" : "Профіль",
+ "You have not added any info yet" : "Вы пакуль не дадалі ніякай інфармацыі",
+ "{user} has not added any info yet" : "{user} пакуль не дадаў(-ла) ніякай інфармацыі",
+ "Edit Profile" : "Рэдагаваць профіль",
+ "Profile not found" : "Профіль не знойдзены",
+ "The profile does not exist." : "Профіль не існуе.",
+ "Back to %s" : "Назад да %s"
+},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
+} \ No newline at end of file
diff --git a/apps/profile/src/views/Profile.vue b/apps/profile/src/views/Profile.vue
index 7865c0d05f1..046a731cb93 100644
--- a/apps/profile/src/views/Profile.vue
+++ b/apps/profile/src/views/Profile.vue
@@ -134,9 +134,9 @@ import NcButton from '@nextcloud/vue/components/NcButton'
import NcContent from '@nextcloud/vue/components/NcContent'
import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
import NcRichText from '@nextcloud/vue/components/NcRichText'
-import AccountIcon from 'vue-material-design-icons/Account.vue'
+import AccountIcon from 'vue-material-design-icons/AccountOutline.vue'
import MapMarkerIcon from 'vue-material-design-icons/MapMarker.vue'
-import PencilIcon from 'vue-material-design-icons/Pencil.vue'
+import PencilIcon from 'vue-material-design-icons/PencilOutline.vue'
interface IProfileAction {
target: string
diff --git a/apps/settings/img/password.svg b/apps/settings/img/password.svg
index be3362cf765..07d9fcea162 100644
--- a/apps/settings/img/password.svg
+++ b/apps/settings/img/password.svg
@@ -1 +1 @@
-<svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M6.308 21.5c-.497 0-.923-.177-1.277-.531a1.742 1.742 0 0 1-.531-1.277v-9.384c0-.497.177-.923.531-1.277.354-.354.78-.531 1.277-.531H7.5v-2c0-1.249.438-2.311 1.314-3.187C9.689 2.438 10.751 2 12 2c1.249 0 2.311.438 3.187 1.313.875.876 1.313 1.938 1.313 3.187v2h1.192c.497 0 .923.177 1.277.531.354.354.531.78.531 1.277v9.384c0 .497-.177.923-.531 1.277-.354.354-.78.531-1.277.531H6.308ZM12 16.75c.486 0 .899-.17 1.24-.51.34-.341.51-.754.51-1.24s-.17-.899-.51-1.239A1.688 1.688 0 0 0 12 13.25c-.486 0-.899.17-1.239.511-.341.34-.511.753-.511 1.239 0 .486.17.899.511 1.24.34.34.753.51 1.239.51ZM9 8.5h6v-2c0-.833-.292-1.542-.875-2.125A2.894 2.894 0 0 0 12 3.5c-.833 0-1.542.292-2.125.875A2.894 2.894 0 0 0 9 6.5v2Z" style="fill-rule:nonzero" transform="matrix(.71795 0 0 .71795 -.61 -.414)"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="16" width="16"><path d="M12,17C10.89,17 10,16.1 10,15C10,13.89 10.89,13 12,13A2,2 0 0,1 14,15A2,2 0 0,1 12,17M18,20V10H6V20H18M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10C4,8.89 4.89,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z" /></svg> \ No newline at end of file
diff --git a/apps/settings/img/personal.png b/apps/settings/img/personal.png
index 179b15522b3..7a67761b53c 100644
--- a/apps/settings/img/personal.png
+++ b/apps/settings/img/personal.png
Binary files differ
diff --git a/apps/settings/img/personal.svg b/apps/settings/img/personal.svg
index e7d2b3e9f75..31ffe28b807 100644
--- a/apps/settings/img/personal.svg
+++ b/apps/settings/img/personal.svg
@@ -1 +1 @@
-<svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M12 11.692c-.962 0-1.786-.342-2.472-1.028C8.843 9.979 8.5 9.155 8.5 8.192c0-.962.343-1.786 1.028-2.471.686-.686 1.51-1.029 2.472-1.029.963 0 1.786.343 2.472 1.029.685.685 1.028 1.509 1.028 2.471 0 .963-.343 1.787-1.028 2.472-.686.686-1.509 1.028-2.472 1.028Zm-7.5 7.616v-2.224c0-.489.133-.943.399-1.36a2.663 2.663 0 0 1 1.067-.962 14.51 14.51 0 0 1 2.991-1.091 12.965 12.965 0 0 1 6.086 0c1.006.243 2.003.606 2.992 1.091.445.224.8.545 1.066.962.266.417.399.871.399 1.36v2.224h-15Z" style="fill-rule:nonzero" transform="matrix(.95789 0 0 .95789 -3.484 -3.495)"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="16" width="16"><path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,6A2,2 0 0,0 10,8A2,2 0 0,0 12,10A2,2 0 0,0 14,8A2,2 0 0,0 12,6M12,13C14.67,13 20,14.33 20,17V20H4V17C4,14.33 9.33,13 12,13M12,14.9C9.03,14.9 5.9,16.36 5.9,17V18.1H18.1V17C18.1,16.36 14.97,14.9 12,14.9Z" /></svg> \ No newline at end of file
diff --git a/apps/settings/img/users-white.svg b/apps/settings/img/users-white.svg
index 4290dcd325f..d52dcac95c2 100644
--- a/apps/settings/img/users-white.svg
+++ b/apps/settings/img/users-white.svg
@@ -1 +1 @@
-<svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M1.798 19.308v-2.224c0-.515.133-.975.399-1.379a2.721 2.721 0 0 1 1.066-.944c.95-.465 1.906-.823 2.867-1.076.961-.251 2.017-.377 3.168-.377 1.151 0 2.207.126 3.168.377.961.253 1.917.611 2.867 1.076.445.225.8.539 1.066.944.266.404.399.864.399 1.379v2.224h-15Zm17 0v-2.346c0-.657-.161-1.282-.482-1.877a4.533 4.533 0 0 0-1.368-1.531c.671.1 1.307.255 1.91.464.602.21 1.177.458 1.725.744.516.275.915.6 1.197.974.281.374.422.783.422 1.226v2.346h-3.404Zm-9.5-7.616c-.962 0-1.786-.342-2.472-1.028-.685-.685-1.028-1.509-1.028-2.472 0-.962.343-1.786 1.028-2.471.686-.686 1.51-1.029 2.472-1.029.963 0 1.787.343 2.472 1.029.685.685 1.028 1.509 1.028 2.471 0 .963-.343 1.787-1.028 2.472a3.367 3.367 0 0 1-2.472 1.028Zm8.635-3.5c0 .963-.343 1.787-1.028 2.472-.686.686-1.51 1.028-2.472 1.028-.113 0-.257-.013-.431-.038a3.814 3.814 0 0 1-.431-.085c.395-.474.698-1 .91-1.578a5.209 5.209 0 0 0-.007-3.593 5.774 5.774 0 0 0-.903-1.582c.144-.052.287-.085.431-.1.144-.016.287-.024.431-.024.962 0 1.786.343 2.472 1.029.685.685 1.028 1.509 1.028 2.471Z" style="fill:#fff;fill-rule:nonzero" transform="matrix(.78418 0 0 .78418 -1.41 -1.43)"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="16" width="16"><path fill="#fff" d="M13.07 10.41A5 5 0 0 0 13.07 4.59A3.39 3.39 0 0 1 15 4A3.5 3.5 0 0 1 15 11A3.39 3.39 0 0 1 13.07 10.41M5.5 7.5A3.5 3.5 0 1 1 9 11A3.5 3.5 0 0 1 5.5 7.5M7.5 7.5A1.5 1.5 0 1 0 9 6A1.5 1.5 0 0 0 7.5 7.5M16 17V19H2V17S2 13 9 13 16 17 16 17M14 17C13.86 16.22 12.67 15 9 15S4.07 16.31 4 17M15.95 13A5.32 5.32 0 0 1 18 17V19H22V17S22 13.37 15.94 13Z" /></svg> \ No newline at end of file
diff --git a/apps/settings/img/users.svg b/apps/settings/img/users.svg
index 6894dfbb44e..91d0afce238 100644
--- a/apps/settings/img/users.svg
+++ b/apps/settings/img/users.svg
@@ -1 +1 @@
-<svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M1.798 19.308v-2.224c0-.515.133-.975.399-1.379a2.721 2.721 0 0 1 1.066-.944c.95-.465 1.906-.823 2.867-1.076.961-.251 2.017-.377 3.168-.377 1.151 0 2.207.126 3.168.377.961.253 1.917.611 2.867 1.076.445.225.8.539 1.066.944.266.404.399.864.399 1.379v2.224h-15Zm17 0v-2.346c0-.657-.161-1.282-.482-1.877a4.533 4.533 0 0 0-1.368-1.531c.671.1 1.307.255 1.91.464.602.21 1.177.458 1.725.744.516.275.915.6 1.197.974.281.374.422.783.422 1.226v2.346h-3.404Zm-9.5-7.616c-.962 0-1.786-.342-2.472-1.028-.685-.685-1.028-1.509-1.028-2.472 0-.962.343-1.786 1.028-2.471.686-.686 1.51-1.029 2.472-1.029.963 0 1.787.343 2.472 1.029.685.685 1.028 1.509 1.028 2.471 0 .963-.343 1.787-1.028 2.472a3.367 3.367 0 0 1-2.472 1.028Zm8.635-3.5c0 .963-.343 1.787-1.028 2.472-.686.686-1.51 1.028-2.472 1.028-.113 0-.257-.013-.431-.038a3.814 3.814 0 0 1-.431-.085c.395-.474.698-1 .91-1.578a5.209 5.209 0 0 0-.007-3.593 5.774 5.774 0 0 0-.903-1.582c.144-.052.287-.085.431-.1.144-.016.287-.024.431-.024.962 0 1.786.343 2.472 1.029.685.685 1.028 1.509 1.028 2.471Z" style="fill-rule:nonzero" transform="matrix(.78418 0 0 .78418 -1.41 -1.43)"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="16" width="16"><path d="M13.07 10.41A5 5 0 0 0 13.07 4.59A3.39 3.39 0 0 1 15 4A3.5 3.5 0 0 1 15 11A3.39 3.39 0 0 1 13.07 10.41M5.5 7.5A3.5 3.5 0 1 1 9 11A3.5 3.5 0 0 1 5.5 7.5M7.5 7.5A1.5 1.5 0 1 0 9 6A1.5 1.5 0 0 0 7.5 7.5M16 17V19H2V17S2 13 9 13 16 17 16 17M14 17C13.86 16.22 12.67 15 9 15S4.07 16.31 4 17M15.95 13A5.32 5.32 0 0 1 18 17V19H22V17S22 13.37 15.94 13Z" /></svg> \ No newline at end of file
diff --git a/apps/settings/l10n/cs.js b/apps/settings/l10n/cs.js
index 15e1f22443a..7fead4b9912 100644
--- a/apps/settings/l10n/cs.js
+++ b/apps/settings/l10n/cs.js
@@ -370,6 +370,8 @@ OC.L10N.register(
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Uživatelé i tak budou moci pořizovat snímky/video z obrazovky. Neposkytuje to jakoukoli definitivní ochranu.",
"Allow users to share via link and emails" : "Povolit uživatelům sdílet pomocí odkazů a e-mailů",
"Allow public uploads" : "Povolit veřejné nahrávání souborů",
+ "Allow public shares to be added to other clouds by federation." : "Umožnit přidávání veřejných sdílení do ostatních cloudů prostřednictvím federování.",
+ "This will add share permissions to all newly created link shares." : "Toto přidá oprávnění ke sdílení ke všem nově vytvářeným sdílením odkazem.",
"Always ask for a password" : "Vždy se zeptat na heslo",
"Enforce password protection" : "Vynutit ochranu heslem",
"Exclude groups from password requirements" : "Z požadavků na heslo vynechat následující skupiny",
diff --git a/apps/settings/l10n/cs.json b/apps/settings/l10n/cs.json
index 4637303628d..7269c122bb3 100644
--- a/apps/settings/l10n/cs.json
+++ b/apps/settings/l10n/cs.json
@@ -368,6 +368,8 @@
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Uživatelé i tak budou moci pořizovat snímky/video z obrazovky. Neposkytuje to jakoukoli definitivní ochranu.",
"Allow users to share via link and emails" : "Povolit uživatelům sdílet pomocí odkazů a e-mailů",
"Allow public uploads" : "Povolit veřejné nahrávání souborů",
+ "Allow public shares to be added to other clouds by federation." : "Umožnit přidávání veřejných sdílení do ostatních cloudů prostřednictvím federování.",
+ "This will add share permissions to all newly created link shares." : "Toto přidá oprávnění ke sdílení ke všem nově vytvářeným sdílením odkazem.",
"Always ask for a password" : "Vždy se zeptat na heslo",
"Enforce password protection" : "Vynutit ochranu heslem",
"Exclude groups from password requirements" : "Z požadavků na heslo vynechat následující skupiny",
diff --git a/apps/settings/l10n/en_GB.js b/apps/settings/l10n/en_GB.js
index c96cc378ed7..c5c2d22ec57 100644
--- a/apps/settings/l10n/en_GB.js
+++ b/apps/settings/l10n/en_GB.js
@@ -370,6 +370,8 @@ OC.L10N.register(
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Users will still be able to screenshot or record the screen. This does not provide any definitive protection.",
"Allow users to share via link and emails" : "Allow users to share via link and emails",
"Allow public uploads" : "Allow public uploads",
+ "Allow public shares to be added to other clouds by federation." : "Allow public shares to be added to other clouds by federation.",
+ "This will add share permissions to all newly created link shares." : "This will add share permissions to all newly created link shares.",
"Always ask for a password" : "Always ask for a password",
"Enforce password protection" : "Enforce password protection",
"Exclude groups from password requirements" : "Exclude groups from password requirements",
diff --git a/apps/settings/l10n/en_GB.json b/apps/settings/l10n/en_GB.json
index ffa0f903f65..a4d53a47659 100644
--- a/apps/settings/l10n/en_GB.json
+++ b/apps/settings/l10n/en_GB.json
@@ -368,6 +368,8 @@
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Users will still be able to screenshot or record the screen. This does not provide any definitive protection.",
"Allow users to share via link and emails" : "Allow users to share via link and emails",
"Allow public uploads" : "Allow public uploads",
+ "Allow public shares to be added to other clouds by federation." : "Allow public shares to be added to other clouds by federation.",
+ "This will add share permissions to all newly created link shares." : "This will add share permissions to all newly created link shares.",
"Always ask for a password" : "Always ask for a password",
"Enforce password protection" : "Enforce password protection",
"Exclude groups from password requirements" : "Exclude groups from password requirements",
diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js
index f3f56954d5e..b796b6bbab5 100644
--- a/apps/settings/l10n/fr.js
+++ b/apps/settings/l10n/fr.js
@@ -343,6 +343,7 @@ OC.L10N.register(
"Nextcloud settings" : "Paramètres Nextcloud",
"Unified task processing" : "Traitement unifié des tâches",
"AI tasks can be implemented by different apps. Here you can set which app should be used for which task." : "Les tâches d'IA peuvent être mises en œuvre par différentes applications. Ici, vous pouvez définir quelle application doit être utilisée pour quelle tâche.",
+ "Allow AI usage for guest users" : "Autoriser l'utilisation de l'IA pour les utilisateurs invités",
"Task:" : "Tâche : ",
"Enable" : "Activer",
"None of your currently installed apps provide Task processing functionality" : "Aucune de vos applications actuellement installées ne fournit de fonctionnalité de traitement des tâches",
@@ -369,6 +370,7 @@ OC.L10N.register(
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Les utilisateurs pourront toujours faire des captures d'écran ou enregistrer l'écran. Cela n'offre aucune protection définitive.",
"Allow users to share via link and emails" : "Autoriser les utilisateurs à partager par lien et par e-mail",
"Allow public uploads" : "Autoriser les téléversements publics",
+ "This will add share permissions to all newly created link shares." : "Cela ajoutera les permissions de partage à tous les nouveaux liens de partage.",
"Always ask for a password" : "Toujours demander un mot de passe",
"Enforce password protection" : "Imposer la protection par mot de passe",
"Exclude groups from password requirements" : "Exclure des groupes des contraintes de mot de passe",
diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json
index 2b64850fbd7..323744f2ded 100644
--- a/apps/settings/l10n/fr.json
+++ b/apps/settings/l10n/fr.json
@@ -341,6 +341,7 @@
"Nextcloud settings" : "Paramètres Nextcloud",
"Unified task processing" : "Traitement unifié des tâches",
"AI tasks can be implemented by different apps. Here you can set which app should be used for which task." : "Les tâches d'IA peuvent être mises en œuvre par différentes applications. Ici, vous pouvez définir quelle application doit être utilisée pour quelle tâche.",
+ "Allow AI usage for guest users" : "Autoriser l'utilisation de l'IA pour les utilisateurs invités",
"Task:" : "Tâche : ",
"Enable" : "Activer",
"None of your currently installed apps provide Task processing functionality" : "Aucune de vos applications actuellement installées ne fournit de fonctionnalité de traitement des tâches",
@@ -367,6 +368,7 @@
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Les utilisateurs pourront toujours faire des captures d'écran ou enregistrer l'écran. Cela n'offre aucune protection définitive.",
"Allow users to share via link and emails" : "Autoriser les utilisateurs à partager par lien et par e-mail",
"Allow public uploads" : "Autoriser les téléversements publics",
+ "This will add share permissions to all newly created link shares." : "Cela ajoutera les permissions de partage à tous les nouveaux liens de partage.",
"Always ask for a password" : "Toujours demander un mot de passe",
"Enforce password protection" : "Imposer la protection par mot de passe",
"Exclude groups from password requirements" : "Exclure des groupes des contraintes de mot de passe",
diff --git a/apps/settings/l10n/ga.js b/apps/settings/l10n/ga.js
index 5f8edd63eca..19dd4c69544 100644
--- a/apps/settings/l10n/ga.js
+++ b/apps/settings/l10n/ga.js
@@ -370,6 +370,8 @@ OC.L10N.register(
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Beidh úsáideoirí fós in ann scáileán a thógáil nó an scáileán a thaifeadadh. Ní sholáthraíonn sé seo aon chosaint chinntitheach.",
"Allow users to share via link and emails" : "Lig d'úsáideoirí a roinnt trí nasc agus ríomhphoist",
"Allow public uploads" : "Ceadaigh uaslódálacha poiblí",
+ "Allow public shares to be added to other clouds by federation." : "Ceadaigh scaireanna poiblí a chur le scamaill eile trí chónaidhm.",
+ "This will add share permissions to all newly created link shares." : "Cuirfidh sé seo ceadanna comhroinnte le gach comhroinnt nasc nua-chruthaithe.",
"Always ask for a password" : "Iarr pasfhocal i gcónaí",
"Enforce password protection" : "Cuir cosaint phasfhocal i bhfeidhm",
"Exclude groups from password requirements" : "Fág grúpaí ó riachtanais phasfhocal",
diff --git a/apps/settings/l10n/ga.json b/apps/settings/l10n/ga.json
index b565f117530..49dacb4ad00 100644
--- a/apps/settings/l10n/ga.json
+++ b/apps/settings/l10n/ga.json
@@ -368,6 +368,8 @@
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Beidh úsáideoirí fós in ann scáileán a thógáil nó an scáileán a thaifeadadh. Ní sholáthraíonn sé seo aon chosaint chinntitheach.",
"Allow users to share via link and emails" : "Lig d'úsáideoirí a roinnt trí nasc agus ríomhphoist",
"Allow public uploads" : "Ceadaigh uaslódálacha poiblí",
+ "Allow public shares to be added to other clouds by federation." : "Ceadaigh scaireanna poiblí a chur le scamaill eile trí chónaidhm.",
+ "This will add share permissions to all newly created link shares." : "Cuirfidh sé seo ceadanna comhroinnte le gach comhroinnt nasc nua-chruthaithe.",
"Always ask for a password" : "Iarr pasfhocal i gcónaí",
"Enforce password protection" : "Cuir cosaint phasfhocal i bhfeidhm",
"Exclude groups from password requirements" : "Fág grúpaí ó riachtanais phasfhocal",
diff --git a/apps/settings/l10n/lv.js b/apps/settings/l10n/lv.js
index 68226b2dd9f..967ff5dd9e2 100644
--- a/apps/settings/l10n/lv.js
+++ b/apps/settings/l10n/lv.js
@@ -16,6 +16,9 @@ OC.L10N.register(
"Unable to retrieve the group list" : "Nevarēja saņemt grupu sarakstu",
"{actor} changed your password" : "{actor] nomainīja Tavu paroli",
"You changed your password" : "Tu nomainīji savu paroli",
+ "{actor} changed your email address" : "{actor} nomainīja Tavu e-pasta adresi",
+ "You changed your email address" : "Tu nomainīji savu e-pasta adresi",
+ "Your email address was changed by an administrator" : "Pārvaldītājs nomainīja Tavu e-pasta adresi",
"You renamed app password \"{token}\" to \"{newToken}\"" : "Tu pārdēvēji lietotnes paroli \"{token}\" par \"{newToken}\"",
"Security" : "Drošība",
"You successfully logged in using two-factor authentication (%1$s)" : "Sekmīga pieteikšanās ar divpakāpju autentificēšanos (%1$s)",
@@ -37,6 +40,10 @@ OC.L10N.register(
"Unable to change full name" : "Nevar nomainīt pilno vārdu",
"Unable to change email address" : "Nevar mainīt e-pasta adresi",
"In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Lai apliecinātu savu tīmekļvietni, zemāk esošais saturs ir jāglabā tīmekļvietnes pamatmapē kā `.well-known/CloudIdVerificationCode.txt` (lūgums pārliecināties, ka viss teksts ir vienā rindiņā):",
+ "%1$s changed your password on %2$s." : "%1$s nomainīja Tavu %2$sparoli.",
+ "Your password on %s was changed." : "Tava %s parole tika nomainīta.",
+ "Your email address on %s was changed." : "Tava %s e-pasta adrese tika nomainīta.",
+ "Your email address on %s was changed by an administrator." : "Pārvaldītājs nomainīja Tavu %s e-pasta adresi",
"Your %s account was created" : "Konts %s ir izveidots",
"Apps" : "Lietotnes",
"Personal" : "Personīgi",
@@ -194,6 +201,7 @@ OC.L10N.register(
"Admins" : "Pārvaldītāji",
"Sending…" : "Sūta …",
"Email sent" : "E-pasta ziņojums nosūtīts",
+ "For performance reasons, when you enable encryption on a Nextcloud server only new and changed files are encrypted." : "Veiktspējas dēļ, kad Nextcloud serverī iespējo šifrēšanu, jaunās un izmainītās datnes tiek šīfrētas.",
"Location" : "Atrašanās vieta",
"Profile picture" : "Profila attēls",
"About" : "Par",
diff --git a/apps/settings/l10n/lv.json b/apps/settings/l10n/lv.json
index 1231c5bc914..6f58b2bb0d9 100644
--- a/apps/settings/l10n/lv.json
+++ b/apps/settings/l10n/lv.json
@@ -14,6 +14,9 @@
"Unable to retrieve the group list" : "Nevarēja saņemt grupu sarakstu",
"{actor} changed your password" : "{actor] nomainīja Tavu paroli",
"You changed your password" : "Tu nomainīji savu paroli",
+ "{actor} changed your email address" : "{actor} nomainīja Tavu e-pasta adresi",
+ "You changed your email address" : "Tu nomainīji savu e-pasta adresi",
+ "Your email address was changed by an administrator" : "Pārvaldītājs nomainīja Tavu e-pasta adresi",
"You renamed app password \"{token}\" to \"{newToken}\"" : "Tu pārdēvēji lietotnes paroli \"{token}\" par \"{newToken}\"",
"Security" : "Drošība",
"You successfully logged in using two-factor authentication (%1$s)" : "Sekmīga pieteikšanās ar divpakāpju autentificēšanos (%1$s)",
@@ -35,6 +38,10 @@
"Unable to change full name" : "Nevar nomainīt pilno vārdu",
"Unable to change email address" : "Nevar mainīt e-pasta adresi",
"In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Lai apliecinātu savu tīmekļvietni, zemāk esošais saturs ir jāglabā tīmekļvietnes pamatmapē kā `.well-known/CloudIdVerificationCode.txt` (lūgums pārliecināties, ka viss teksts ir vienā rindiņā):",
+ "%1$s changed your password on %2$s." : "%1$s nomainīja Tavu %2$sparoli.",
+ "Your password on %s was changed." : "Tava %s parole tika nomainīta.",
+ "Your email address on %s was changed." : "Tava %s e-pasta adrese tika nomainīta.",
+ "Your email address on %s was changed by an administrator." : "Pārvaldītājs nomainīja Tavu %s e-pasta adresi",
"Your %s account was created" : "Konts %s ir izveidots",
"Apps" : "Lietotnes",
"Personal" : "Personīgi",
@@ -192,6 +199,7 @@
"Admins" : "Pārvaldītāji",
"Sending…" : "Sūta …",
"Email sent" : "E-pasta ziņojums nosūtīts",
+ "For performance reasons, when you enable encryption on a Nextcloud server only new and changed files are encrypted." : "Veiktspējas dēļ, kad Nextcloud serverī iespējo šifrēšanu, jaunās un izmainītās datnes tiek šīfrētas.",
"Location" : "Atrašanās vieta",
"Profile picture" : "Profila attēls",
"About" : "Par",
diff --git a/apps/settings/l10n/mk.js b/apps/settings/l10n/mk.js
index 4aa38bf9347..74d77d42867 100644
--- a/apps/settings/l10n/mk.js
+++ b/apps/settings/l10n/mk.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"_%n app has an update available_::_%n apps have an update available_" : ["За %n апликација има достапно ажурирање","За %n апликации има достапно ажурирање"],
"_Update_::_Update all_" : ["Ажурирај","Ажурирај ги сите"],
"Group name" : "Име на група",
+ "Nothing to show" : "Нема што да се прикаже",
"Type" : "Вид",
"Learn more" : "Научи повеќе",
"Confirm" : "Потврди",
@@ -274,6 +275,7 @@ OC.L10N.register(
"Picture provided by original account" : "Слика обезбедена од оригинална сметка",
"Set as profile picture" : "Постави фотографија на профилот",
"Please note that it can take up to 24 hours for your profile picture to be updated everywhere." : "Имајте предвид дека може да потрае до 24 часа за да се ажурира аватарот насекаде.",
+ "Your biography. Markdown is supported." : "Вашата биографија.",
"Enter your date of birth" : "Внесете го вашиот датум на раѓање",
"You are using {s}{usage}{/s}" : "Користите {s}{usage}{/s}",
"You are using {s}{usage}{/s} of {s}{totalSpace}{/s} ({s}{usageRelative}%{/s})" : "Користите {s}{usage}{/s} of {s}{totalSpace}{/s} ({s}{usageRelative}%{/s})",
@@ -403,6 +405,8 @@ OC.L10N.register(
"Locale" : "Локација",
"First day of week" : "Прв ден од неделата",
"Not available as this property is required for core functionality including file sharing and calendar invitations" : "Не е достапно бидејќи ова својство е потребно за основна функционалност, вклучувајќи споделување датотеки и покани од календар",
+ "Not available as federation has been disabled for your account, contact your system administration if you have any questions" : "Не е достапно бидејќи федерацијата е оневозможена за вашата сметка, контактирајте го администраторот доколку имате какви било прашања.",
+ "Not available as publishing account specific data to the lookup server is not allowed, contact your system administration if you have any questions" : "Не е достапно бидејќи не е дозволено објавување специфични податоци за корисникот на серверот за пребарување, контактирајте со вашиот системски администратор ако имате какви било прашања",
"Your apps" : "Ваши апликации",
"Active apps" : "Активни апликации",
"Disabled apps" : "Оневозможени апликации",
diff --git a/apps/settings/l10n/mk.json b/apps/settings/l10n/mk.json
index 51a26ea439d..96c0e392842 100644
--- a/apps/settings/l10n/mk.json
+++ b/apps/settings/l10n/mk.json
@@ -179,6 +179,7 @@
"_%n app has an update available_::_%n apps have an update available_" : ["За %n апликација има достапно ажурирање","За %n апликации има достапно ажурирање"],
"_Update_::_Update all_" : ["Ажурирај","Ажурирај ги сите"],
"Group name" : "Име на група",
+ "Nothing to show" : "Нема што да се прикаже",
"Type" : "Вид",
"Learn more" : "Научи повеќе",
"Confirm" : "Потврди",
@@ -272,6 +273,7 @@
"Picture provided by original account" : "Слика обезбедена од оригинална сметка",
"Set as profile picture" : "Постави фотографија на профилот",
"Please note that it can take up to 24 hours for your profile picture to be updated everywhere." : "Имајте предвид дека може да потрае до 24 часа за да се ажурира аватарот насекаде.",
+ "Your biography. Markdown is supported." : "Вашата биографија.",
"Enter your date of birth" : "Внесете го вашиот датум на раѓање",
"You are using {s}{usage}{/s}" : "Користите {s}{usage}{/s}",
"You are using {s}{usage}{/s} of {s}{totalSpace}{/s} ({s}{usageRelative}%{/s})" : "Користите {s}{usage}{/s} of {s}{totalSpace}{/s} ({s}{usageRelative}%{/s})",
@@ -401,6 +403,8 @@
"Locale" : "Локација",
"First day of week" : "Прв ден од неделата",
"Not available as this property is required for core functionality including file sharing and calendar invitations" : "Не е достапно бидејќи ова својство е потребно за основна функционалност, вклучувајќи споделување датотеки и покани од календар",
+ "Not available as federation has been disabled for your account, contact your system administration if you have any questions" : "Не е достапно бидејќи федерацијата е оневозможена за вашата сметка, контактирајте го администраторот доколку имате какви било прашања.",
+ "Not available as publishing account specific data to the lookup server is not allowed, contact your system administration if you have any questions" : "Не е достапно бидејќи не е дозволено објавување специфични податоци за корисникот на серверот за пребарување, контактирајте со вашиот системски администратор ако имате какви било прашања",
"Your apps" : "Ваши апликации",
"Active apps" : "Активни апликации",
"Disabled apps" : "Оневозможени апликации",
diff --git a/apps/settings/l10n/tr.js b/apps/settings/l10n/tr.js
index 7a88f10365f..5d18d8f7ffa 100644
--- a/apps/settings/l10n/tr.js
+++ b/apps/settings/l10n/tr.js
@@ -343,6 +343,7 @@ OC.L10N.register(
"Nextcloud settings" : "Nextcloud ayarları",
"Unified task processing" : "Birleştirilmiş görev işleme",
"AI tasks can be implemented by different apps. Here you can set which app should be used for which task." : "Yapay zeka görevleri farklı uygulamalardan sağlanabilir. Buradan, bu görev için hangi uygulamanın kullanılacağını ayarlayabilirsiniz.",
+ "Allow AI usage for guest users" : "Konuk kullanıcılar YZ kullanabilsin",
"Task:" : "Görev:",
"Enable" : "Kullanıma al",
"None of your currently installed apps provide Task processing functionality" : "Kurulu uygulamaların hiçbirinde görev işleme özelliği yok",
@@ -369,6 +370,8 @@ OC.L10N.register(
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Kullanıcılar ekran görüntüsü alabilirler veya ekranı kaydedebilirler. Bu seçenek tam bir kesin koruma sağlamaz.",
"Allow users to share via link and emails" : "Kullanıcılar bağlantı ve e-posta ile paylaşabilsin",
"Allow public uploads" : "Herkes yükleyebilsin",
+ "Allow public shares to be added to other clouds by federation." : "Herkese açık paylaşımların birlik ile diğer bulutlara eklenebilmesini sağlar.",
+ "This will add share permissions to all newly created link shares." : "Bu seçenek, yeni oluşturulan tüm bağlantı paylaşımlarına paylaşım izinleri ekler.",
"Always ask for a password" : "Her zaman parola sorulsun",
"Enforce password protection" : "Parola koruması zorunlu kılınsın",
"Exclude groups from password requirements" : "Parola gereksinimlerine katılmayacak gruplar",
diff --git a/apps/settings/l10n/tr.json b/apps/settings/l10n/tr.json
index 7f03aa37823..a2854f91139 100644
--- a/apps/settings/l10n/tr.json
+++ b/apps/settings/l10n/tr.json
@@ -341,6 +341,7 @@
"Nextcloud settings" : "Nextcloud ayarları",
"Unified task processing" : "Birleştirilmiş görev işleme",
"AI tasks can be implemented by different apps. Here you can set which app should be used for which task." : "Yapay zeka görevleri farklı uygulamalardan sağlanabilir. Buradan, bu görev için hangi uygulamanın kullanılacağını ayarlayabilirsiniz.",
+ "Allow AI usage for guest users" : "Konuk kullanıcılar YZ kullanabilsin",
"Task:" : "Görev:",
"Enable" : "Kullanıma al",
"None of your currently installed apps provide Task processing functionality" : "Kurulu uygulamaların hiçbirinde görev işleme özelliği yok",
@@ -367,6 +368,8 @@
"Users will still be able to screenshot or record the screen. This does not provide any definitive protection." : "Kullanıcılar ekran görüntüsü alabilirler veya ekranı kaydedebilirler. Bu seçenek tam bir kesin koruma sağlamaz.",
"Allow users to share via link and emails" : "Kullanıcılar bağlantı ve e-posta ile paylaşabilsin",
"Allow public uploads" : "Herkes yükleyebilsin",
+ "Allow public shares to be added to other clouds by federation." : "Herkese açık paylaşımların birlik ile diğer bulutlara eklenebilmesini sağlar.",
+ "This will add share permissions to all newly created link shares." : "Bu seçenek, yeni oluşturulan tüm bağlantı paylaşımlarına paylaşım izinleri ekler.",
"Always ask for a password" : "Her zaman parola sorulsun",
"Enforce password protection" : "Parola koruması zorunlu kılınsın",
"Exclude groups from password requirements" : "Parola gereksinimlerine katılmayacak gruplar",
diff --git a/apps/settings/src/components/AppList/AppLevelBadge.vue b/apps/settings/src/components/AppList/AppLevelBadge.vue
index 900aa69b74a..8461f5eb6b9 100644
--- a/apps/settings/src/components/AppList/AppLevelBadge.vue
+++ b/apps/settings/src/components/AppList/AppLevelBadge.vue
@@ -15,7 +15,7 @@
<script setup lang="ts">
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
-import { mdiCheck, mdiStarShooting } from '@mdi/js'
+import { mdiCheck, mdiStarShootingOutline } from '@mdi/js'
import { translate as t } from '@nextcloud/l10n'
import { computed } from 'vue'
@@ -28,7 +28,7 @@ const props = defineProps<{
const isSupported = computed(() => props.level === 300)
const isFeatured = computed(() => props.level === 200)
-const badgeIcon = computed(() => isSupported.value ? mdiStarShooting : mdiCheck)
+const badgeIcon = computed(() => isSupported.value ? mdiStarShootingOutline : mdiCheck)
const badgeText = computed(() => isSupported.value ? t('settings', 'Supported') : t('settings', 'Featured'))
const badgeTitle = computed(() => isSupported.value
? t('settings', 'This app is supported via your current Nextcloud subscription.')
diff --git a/apps/settings/src/components/AppNavigationGroupList.vue b/apps/settings/src/components/AppNavigationGroupList.vue
index 2be7cce2f8b..8f21d18d695 100644
--- a/apps/settings/src/components/AppNavigationGroupList.vue
+++ b/apps/settings/src/components/AppNavigationGroupList.vue
@@ -18,7 +18,7 @@
<template v-if="isAdminOrDelegatedAdmin" #actions>
<NcActionText>
<template #icon>
- <NcIconSvgWrapper :path="mdiAccountGroup" />
+ <NcIconSvgWrapper :path="mdiAccountGroupOutline" />
</template>
{{ t('settings', 'Create group') }}
</NcActionText>
@@ -60,7 +60,7 @@
import type CancelablePromise from 'cancelable-promise'
import type { IGroup } from '../views/user-types.d.ts'
-import { mdiAccountGroup, mdiPlus } from '@mdi/js'
+import { mdiAccountGroupOutline, mdiPlus } from '@mdi/js'
import { showError } from '@nextcloud/dialogs'
import { t } from '@nextcloud/l10n'
import { useElementVisibility } from '@vueuse/core'
diff --git a/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue b/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue
index febc034514f..bb91940c763 100644
--- a/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue
+++ b/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue
@@ -8,7 +8,7 @@
:name="t('settings', 'Nothing to show')"
:description="t('settings', 'Could not load section content from app store.')">
<template #icon>
- <NcIconSvgWrapper :path="mdiEyeOff" :size="64" />
+ <NcIconSvgWrapper :path="mdiEyeOffOutline" :size="64" />
</template>
</NcEmptyContent>
<NcEmptyContent v-else-if="elements.length === 0"
@@ -30,7 +30,7 @@
<script setup lang="ts">
import type { IAppDiscoverElements } from '../../constants/AppDiscoverTypes.ts'
-import { mdiEyeOff } from '@mdi/js'
+import { mdiEyeOffOutline } from '@mdi/js'
import { showError } from '@nextcloud/dialogs'
import { translate as t } from '@nextcloud/l10n'
import { generateUrl } from '@nextcloud/router'
diff --git a/apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue b/apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue
index 04c49827b02..67d4afa6566 100644
--- a/apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue
+++ b/apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue
@@ -65,7 +65,7 @@
style="margin-top: 6px;"
@click="removeMount(mount)">
<template #icon>
- <NcIconSvgWrapper :path="mdiDelete" />
+ <NcIconSvgWrapper :path="mdiDeleteOutline" />
</template>
</NcButton>
</div>
@@ -160,7 +160,7 @@ import NcButton from '@nextcloud/vue/components/NcButton'
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
-import { mdiPlus, mdiCheck, mdiClose, mdiDelete } from '@mdi/js'
+import { mdiPlus, mdiCheck, mdiClose, mdiDeleteOutline } from '@mdi/js'
import { useAppApiStore } from '../../store/app-api-store.ts'
import { useAppsStore } from '../../store/apps-store.ts'
@@ -216,7 +216,7 @@ export default {
mdiPlus,
mdiCheck,
mdiClose,
- mdiDelete,
+ mdiDeleteOutline,
}
},
data() {
diff --git a/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue b/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue
index 3aa42f1d15a..8a387b55ecf 100644
--- a/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue
+++ b/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue
@@ -8,7 +8,7 @@
:name="t('settings', 'Details')"
:order="1">
<template #icon>
- <NcIconSvgWrapper :path="mdiTextBox" />
+ <NcIconSvgWrapper :path="mdiTextBoxOutline" />
</template>
<div class="app-details">
<div class="app-details__actions">
@@ -82,7 +82,7 @@
type="secondary"
@click="() => showDeployOptionsModal = true">
<template #icon>
- <NcIconSvgWrapper :path="mdiToyBrickPlus" />
+ <NcIconSvgWrapper :path="mdiToyBrickPlusOutline" />
</template>
{{ t('settings', 'Deploy options') }}
</NcButton>
@@ -162,7 +162,7 @@
:aria-label="t('settings', 'Report a bug')"
:title="t('settings', 'Report a bug')">
<template #icon>
- <NcIconSvgWrapper :path="mdiBug" />
+ <NcIconSvgWrapper :path="mdiBugOutline" />
</template>
</NcButton>
<NcButton :disabled="!app.bugs"
@@ -170,7 +170,7 @@
:aria-label="t('settings', 'Request feature')"
:title="t('settings', 'Request feature')">
<template #icon>
- <NcIconSvgWrapper :path="mdiFeatureSearch" />
+ <NcIconSvgWrapper :path="mdiFeatureSearchOutline" />
</template>
</NcButton>
<NcButton v-if="app.appstoreData?.discussion"
@@ -178,7 +178,7 @@
:aria-label="t('settings', 'Ask questions or discuss')"
:title="t('settings', 'Ask questions or discuss')">
<template #icon>
- <NcIconSvgWrapper :path="mdiTooltipQuestion" />
+ <NcIconSvgWrapper :path="mdiTooltipQuestionOutline" />
</template>
</NcButton>
<NcButton v-if="!app.internal"
@@ -209,7 +209,7 @@ import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwit
import AppDeployOptionsModal from './AppDeployOptionsModal.vue'
import AppManagement from '../../mixins/AppManagement.js'
-import { mdiBug, mdiFeatureSearch, mdiStar, mdiTextBox, mdiTooltipQuestion, mdiToyBrickPlus } from '@mdi/js'
+import { mdiBugOutline, mdiFeatureSearchOutline, mdiStar, mdiTextBoxOutline, mdiTooltipQuestionOutline, mdiToyBrickPlusOutline } from '@mdi/js'
import { useAppsStore } from '../../store/apps-store'
import { useAppApiStore } from '../../store/app-api-store'
@@ -242,12 +242,12 @@ export default {
store,
appApiStore,
- mdiBug,
- mdiFeatureSearch,
+ mdiBugOutline,
+ mdiFeatureSearchOutline,
mdiStar,
- mdiTextBox,
- mdiTooltipQuestion,
- mdiToyBrickPlus,
+ mdiTextBoxOutline,
+ mdiTooltipQuestionOutline,
+ mdiToyBrickPlusOutline,
}
},
diff --git a/apps/settings/src/components/AuthToken.vue b/apps/settings/src/components/AuthToken.vue
index 6f3e931d1b9..15286adb135 100644
--- a/apps/settings/src/components/AuthToken.vue
+++ b/apps/settings/src/components/AuthToken.vue
@@ -80,7 +80,7 @@
import type { PropType } from 'vue'
import type { IToken } from '../store/authtoken'
-import { mdiCheck, mdiCellphone, mdiTablet, mdiMonitor, mdiWeb, mdiKey, mdiMicrosoftEdge, mdiFirefox, mdiGoogleChrome, mdiAppleSafari, mdiAndroid, mdiAppleIos } from '@mdi/js'
+import { mdiCheck, mdiCellphone, mdiTablet, mdiMonitor, mdiWeb, mdiKeyOutline, mdiMicrosoftEdge, mdiFirefox, mdiGoogleChrome, mdiAppleSafari, mdiAndroid, mdiAppleIos } from '@mdi/js'
import { translate as t } from '@nextcloud/l10n'
import { defineComponent } from 'vue'
import { TokenType, useAuthTokenStore } from '../store/authtoken.ts'
@@ -215,7 +215,7 @@ export default defineComponent({
tokenIcon() {
// For custom created app tokens / app passwords
if (this.token.type === TokenType.PERMANENT_TOKEN) {
- return mdiKey
+ return mdiKeyOutline
}
switch (this.client?.id) {
diff --git a/apps/settings/src/components/GroupListItem.vue b/apps/settings/src/components/GroupListItem.vue
index 76088fa74db..69bb8a3f575 100644
--- a/apps/settings/src/components/GroupListItem.vue
+++ b/apps/settings/src/components/GroupListItem.vue
@@ -80,9 +80,9 @@ import NcCounterBubble from '@nextcloud/vue/components/NcCounterBubble'
import NcModal from '@nextcloud/vue/components/NcModal'
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
-import AccountGroup from 'vue-material-design-icons/AccountGroup.vue'
-import Delete from 'vue-material-design-icons/Delete.vue'
-import Pencil from 'vue-material-design-icons/Pencil.vue'
+import AccountGroup from 'vue-material-design-icons/AccountGroupOutline.vue'
+import Delete from 'vue-material-design-icons/DeleteOutline.vue'
+import Pencil from 'vue-material-design-icons/PencilOutline.vue'
import { showError } from '@nextcloud/dialogs'
diff --git a/apps/settings/src/components/PersonalInfo/AvatarSection.vue b/apps/settings/src/components/PersonalInfo/AvatarSection.vue
index 400ccb510f3..a99f228668c 100644
--- a/apps/settings/src/components/PersonalInfo/AvatarSection.vue
+++ b/apps/settings/src/components/PersonalInfo/AvatarSection.vue
@@ -88,7 +88,7 @@ import 'cropperjs/dist/cropper.css'
import Upload from 'vue-material-design-icons/Upload.vue'
import Folder from 'vue-material-design-icons/Folder.vue'
-import Delete from 'vue-material-design-icons/Delete.vue'
+import Delete from 'vue-material-design-icons/DeleteOutline.vue'
import HeaderBar from './shared/HeaderBar.vue'
import { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'
diff --git a/apps/settings/src/components/PersonalInfo/DetailsSection.vue b/apps/settings/src/components/PersonalInfo/DetailsSection.vue
index b0eb137d9e5..d4bb0ce16ec 100644
--- a/apps/settings/src/components/PersonalInfo/DetailsSection.vue
+++ b/apps/settings/src/components/PersonalInfo/DetailsSection.vue
@@ -36,7 +36,7 @@ import { loadState } from '@nextcloud/initial-state'
import { t } from '@nextcloud/l10n'
import NcProgressBar from '@nextcloud/vue/components/NcProgressBar'
-import Account from 'vue-material-design-icons/Account.vue'
+import Account from 'vue-material-design-icons/AccountOutline.vue'
import CircleSlice from 'vue-material-design-icons/CircleSlice3.vue'
import HeaderBar from './shared/HeaderBar.vue'
diff --git a/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue b/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue
index de6114b57bc..6a6baef8817 100644
--- a/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue
+++ b/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue
@@ -48,7 +48,7 @@
:disabled="deleteDisabled"
@click="deleteEmail">
<template #icon>
- <NcIconSvgWrapper :path="mdiTrashCan" />
+ <NcIconSvgWrapper :path="mdiTrashCanOutline" />
</template>
{{ deleteEmailLabel }}
</NcActionButton>
@@ -71,7 +71,7 @@ import NcTextField from '@nextcloud/vue/components/NcTextField'
import debounce from 'debounce'
-import { mdiArrowLeft, mdiLock, mdiStar, mdiStarOutline, mdiTrashCan } from '@mdi/js'
+import { mdiArrowLeft, mdiLockOutline, mdiStar, mdiStarOutline, mdiTrashCanOutline } from '@mdi/js'
import FederationControl from '../shared/FederationControl.vue'
import { handleError } from '../../../utils/handlers.ts'
@@ -133,10 +133,10 @@ export default {
setup() {
return {
mdiArrowLeft,
- mdiLock,
+ mdiLockOutline,
mdiStar,
mdiStarOutline,
- mdiTrashCan,
+ mdiTrashCanOutline,
saveAdditionalEmailScope,
}
},
diff --git a/apps/settings/src/components/UserList.vue b/apps/settings/src/components/UserList.vue
index 84c204805cc..459548fad26 100644
--- a/apps/settings/src/components/UserList.vue
+++ b/apps/settings/src/components/UserList.vue
@@ -19,7 +19,7 @@
<NcLoadingIcon v-if="isInitialLoad && loading.users"
:name="t('settings', 'Loading accounts …')"
:size="64" />
- <NcIconSvgWrapper v-else :path="mdiAccountGroup" :size="64" />
+ <NcIconSvgWrapper v-else :path="mdiAccountGroupOutline" :size="64" />
</template>
</NcEmptyContent>
@@ -58,7 +58,7 @@
</template>
<script>
-import { mdiAccountGroup } from '@mdi/js'
+import { mdiAccountGroupOutline } from '@mdi/js'
import { showError } from '@nextcloud/dialogs'
import { subscribe, unsubscribe } from '@nextcloud/event-bus'
import { Fragment } from 'vue-frag'
@@ -120,7 +120,7 @@ export default {
setup() {
// non reactive properties
return {
- mdiAccountGroup,
+ mdiAccountGroupOutline,
rowHeight: 55,
UserRow,
diff --git a/apps/settings/src/components/Users/UserRowActions.vue b/apps/settings/src/components/Users/UserRowActions.vue
index 8e30d584dfd..efd70d879a7 100644
--- a/apps/settings/src/components/Users/UserRowActions.vue
+++ b/apps/settings/src/components/Users/UserRowActions.vue
@@ -39,7 +39,7 @@ import NcActionButton from '@nextcloud/vue/components/NcActionButton'
import NcActions from '@nextcloud/vue/components/NcActions'
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
import SvgCheck from '@mdi/svg/svg/check.svg?raw'
-import SvgPencil from '@mdi/svg/svg/pencil.svg?raw'
+import SvgPencil from '@mdi/svg/svg/pencil-outline.svg?raw'
interface UserAction {
action: (event: MouseEvent, user: Record<string, unknown>) => void,
diff --git a/apps/settings/src/constants/AccountPropertyConstants.ts b/apps/settings/src/constants/AccountPropertyConstants.ts
index 5ea15e05c6c..455c210976f 100644
--- a/apps/settings/src/constants/AccountPropertyConstants.ts
+++ b/apps/settings/src/constants/AccountPropertyConstants.ts
@@ -7,7 +7,7 @@
* SYNC to be kept in sync with `lib/public/Accounts/IAccountManager.php`
*/
-import { mdiAccountGroup, mdiCellphone, mdiLock, mdiWeb } from '@mdi/js'
+import { mdiAccountGroupOutline, mdiCellphone, mdiLockOutline, mdiWeb } from '@mdi/js'
import { translate as t } from '@nextcloud/l10n'
/** Enum of account properties */
@@ -171,14 +171,14 @@ export const SCOPE_PROPERTY_ENUM = Object.freeze({
displayName: t('settings', 'Local'),
tooltip: t('settings', 'Only visible to people on this instance and guests'),
// tooltipDisabled is not required here as this scope is supported by all account properties
- icon: mdiLock,
+ icon: mdiLockOutline,
},
[SCOPE_ENUM.FEDERATED]: {
name: SCOPE_ENUM.FEDERATED,
displayName: t('settings', 'Federated'),
tooltip: t('settings', 'Only synchronize to trusted servers'),
tooltipDisabled: t('settings', 'Not available as federation has been disabled for your account, contact your system administration if you have any questions'),
- icon: mdiAccountGroup,
+ icon: mdiAccountGroupOutline,
},
[SCOPE_ENUM.PUBLISHED]: {
name: SCOPE_ENUM.PUBLISHED,
diff --git a/apps/settings/src/constants/AppstoreCategoryIcons.ts b/apps/settings/src/constants/AppstoreCategoryIcons.ts
index 7e7e00df9b0..24bb0faea6d 100644
--- a/apps/settings/src/constants/AppstoreCategoryIcons.ts
+++ b/apps/settings/src/constants/AppstoreCategoryIcons.ts
@@ -3,29 +3,29 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import {
- mdiAccount,
- mdiAccountMultiple,
- mdiArchive,
+ mdiAccountOutline,
+ mdiAccountMultipleOutline,
+ mdiArchiveOutline,
mdiCheck,
- mdiClipboardFlow,
+ mdiClipboardFlowOutline,
mdiClose,
- mdiCog,
- mdiControllerClassic,
+ mdiCogOutline,
+ mdiControllerClassicOutline,
mdiDownload,
mdiFileDocumentEdit,
mdiFolder,
- mdiKey,
+ mdiKeyOutline,
mdiMagnify,
mdiMonitorEye,
mdiMultimedia,
- mdiOfficeBuilding,
+ mdiOfficeBuildingOutline,
mdiOpenInApp,
mdiSecurity,
mdiStar,
mdiStarCircleOutline,
- mdiStarShooting,
+ mdiStarShootingOutline,
mdiTools,
- mdiViewColumn,
+ mdiViewColumnOutline,
} from '@mdi/js'
/**
@@ -34,28 +34,28 @@ import {
export default Object.freeze({
// system special categories
discover: mdiStarCircleOutline,
- installed: mdiAccount,
+ installed: mdiAccountOutline,
enabled: mdiCheck,
disabled: mdiClose,
- bundles: mdiArchive,
- supported: mdiStarShooting,
+ bundles: mdiArchiveOutline,
+ supported: mdiStarShootingOutline,
featured: mdiStar,
updates: mdiDownload,
// generic categories
- auth: mdiKey,
- customization: mdiCog,
- dashboard: mdiViewColumn,
+ auth: mdiKeyOutline,
+ customization: mdiCogOutline,
+ dashboard: mdiViewColumnOutline,
files: mdiFolder,
- games: mdiControllerClassic,
+ games: mdiControllerClassicOutline,
integration: mdiOpenInApp,
monitoring: mdiMonitorEye,
multimedia: mdiMultimedia,
office: mdiFileDocumentEdit,
- organization: mdiOfficeBuilding,
+ organization: mdiOfficeBuildingOutline,
search: mdiMagnify,
security: mdiSecurity,
- social: mdiAccountMultiple,
+ social: mdiAccountMultipleOutline,
tools: mdiTools,
- workflow: mdiClipboardFlow,
+ workflow: mdiClipboardFlowOutline,
})
diff --git a/apps/settings/src/views/UserManagementNavigation.vue b/apps/settings/src/views/UserManagementNavigation.vue
index df3670bcfc7..95a12ac7c51 100644
--- a/apps/settings/src/views/UserManagementNavigation.vue
+++ b/apps/settings/src/views/UserManagementNavigation.vue
@@ -22,7 +22,7 @@
:name="t('settings', 'All accounts')"
:to="{ name: 'users' }">
<template #icon>
- <NcIconSvgWrapper :path="mdiAccount" />
+ <NcIconSvgWrapper :path="mdiAccountOutline" />
</template>
<template #counter>
<NcCounterBubble v-if="userCount" :type="!selectedGroupDecoded ? 'highlighted' : undefined">
@@ -37,7 +37,7 @@
:name="t('settings', 'Admins')"
:to="{ name: 'group', params: { selectedGroup: 'admin' } }">
<template #icon>
- <NcIconSvgWrapper :path="mdiShieldAccount" />
+ <NcIconSvgWrapper :path="mdiShieldAccountOutline" />
</template>
<template #counter>
<NcCounterBubble v-if="adminGroup && adminGroup.count > 0"
@@ -70,7 +70,7 @@
:name="t('settings', 'Disabled accounts')"
:to="{ name: 'group', params: { selectedGroup: 'disabled' } }">
<template #icon>
- <NcIconSvgWrapper :path="mdiAccountOff" />
+ <NcIconSvgWrapper :path="mdiAccountOffOutline" />
</template>
<template v-if="disabledGroup.usercount > 0" #counter>
<NcCounterBubble :type="selectedGroupDecoded === 'disabled' ? 'highlighted' : undefined">
@@ -87,7 +87,7 @@
type="tertiary"
@click="isDialogOpen = true">
<template #icon>
- <NcIconSvgWrapper :path="mdiCog" />
+ <NcIconSvgWrapper :path="mdiCogOutline" />
</template>
{{ t('settings', 'Account management settings') }}
</NcButton>
@@ -97,7 +97,7 @@
</template>
<script setup lang="ts">
-import { mdiAccount, mdiAccountOff, mdiCog, mdiPlus, mdiShieldAccount, mdiHistory } from '@mdi/js'
+import { mdiAccountOutline, mdiAccountOffOutline, mdiCogOutline, mdiPlus, mdiShieldAccountOutline, mdiHistory } from '@mdi/js'
import { translate as t } from '@nextcloud/l10n'
import { computed, ref } from 'vue'
diff --git a/apps/systemtags/src/components/SystemTagPicker.vue b/apps/systemtags/src/components/SystemTagPicker.vue
index 9a3b8e19b68..377e76ed75f 100644
--- a/apps/systemtags/src/components/SystemTagPicker.vue
+++ b/apps/systemtags/src/components/SystemTagPicker.vue
@@ -148,9 +148,9 @@ import NcTextField from '@nextcloud/vue/components/NcTextField'
import CheckIcon from 'vue-material-design-icons/CheckCircle.vue'
import CircleIcon from 'vue-material-design-icons/Circle.vue'
import CircleOutlineIcon from 'vue-material-design-icons/CircleOutline.vue'
-import PencilIcon from 'vue-material-design-icons/Pencil.vue'
+import PencilIcon from 'vue-material-design-icons/PencilOutline.vue'
import PlusIcon from 'vue-material-design-icons/Plus.vue'
-import TagIcon from 'vue-material-design-icons/Tag.vue'
+import TagIcon from 'vue-material-design-icons/TagOutline.vue'
import { createTag, fetchTag, fetchTags, getTagObjects, setTagObjects, updateTag } from '../services/api.ts'
import { elementColor, invertTextColor, isDarkModeEnabled } from '../utils/colorUtils.ts'
diff --git a/apps/systemtags/src/files_actions/bulkSystemTagsAction.ts b/apps/systemtags/src/files_actions/bulkSystemTagsAction.ts
index 0f33650d588..7dfe90a1527 100644
--- a/apps/systemtags/src/files_actions/bulkSystemTagsAction.ts
+++ b/apps/systemtags/src/files_actions/bulkSystemTagsAction.ts
@@ -10,7 +10,7 @@ import { isPublicShare } from '@nextcloud/sharing/public'
import { spawnDialog } from '@nextcloud/dialogs'
import { t } from '@nextcloud/l10n'
-import TagMultipleSvg from '@mdi/svg/svg/tag-multiple.svg?raw'
+import TagMultipleSvg from '@mdi/svg/svg/tag-multiple-outline.svg?raw'
/**
* Spawn a dialog to add or remove tags from multiple nodes.
diff --git a/apps/systemtags/src/files_views/systemtagsView.ts b/apps/systemtags/src/files_views/systemtagsView.ts
index 46e5af6c3c1..624d2036802 100644
--- a/apps/systemtags/src/files_views/systemtagsView.ts
+++ b/apps/systemtags/src/files_views/systemtagsView.ts
@@ -7,7 +7,7 @@ import { translate as t } from '@nextcloud/l10n'
import { View, getNavigation } from '@nextcloud/files'
import { getContents } from '../services/systemtags.js'
-import svgTagMultiple from '@mdi/svg/svg/tag-multiple.svg?raw'
+import svgTagMultiple from '@mdi/svg/svg/tag-multiple-outline.svg?raw'
export const systemTagsViewId = 'tags'
diff --git a/apps/theming/src/components/BackgroundSettings.vue b/apps/theming/src/components/BackgroundSettings.vue
index ce4489138ff..58b76dd9602 100644
--- a/apps/theming/src/components/BackgroundSettings.vue
+++ b/apps/theming/src/components/BackgroundSettings.vue
@@ -87,7 +87,7 @@ import NcColorPicker from '@nextcloud/vue/components/NcColorPicker'
import Check from 'vue-material-design-icons/Check.vue'
import ImageEdit from 'vue-material-design-icons/ImageEdit.vue'
-import ColorPalette from 'vue-material-design-icons/Palette.vue'
+import ColorPalette from 'vue-material-design-icons/PaletteOutline.vue'
const shippedBackgroundList = loadState('theming', 'shippedBackgrounds')
const backgroundImage = loadState('theming', 'userBackgroundImage')
diff --git a/apps/theming/src/components/UserPrimaryColor.vue b/apps/theming/src/components/UserPrimaryColor.vue
index 462ce43e997..f10b8a01825 100644
--- a/apps/theming/src/components/UserPrimaryColor.vue
+++ b/apps/theming/src/components/UserPrimaryColor.vue
@@ -38,7 +38,7 @@ import debounce from 'debounce'
import NcButton from '@nextcloud/vue/components/NcButton'
import NcColorPicker from '@nextcloud/vue/components/NcColorPicker'
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
-import IconColorPalette from 'vue-material-design-icons/Palette.vue'
+import IconColorPalette from 'vue-material-design-icons/PaletteOutline.vue'
import IconUndo from 'vue-material-design-icons/UndoVariant.vue'
const { primaryColor, defaultPrimaryColor } = loadState('theming', 'data', { primaryColor: '#0082c9', defaultPrimaryColor: '#0082c9' })
diff --git a/apps/theming/src/components/admin/FileInputField.vue b/apps/theming/src/components/admin/FileInputField.vue
index 698bc53c402..d5e0052f5bd 100644
--- a/apps/theming/src/components/admin/FileInputField.vue
+++ b/apps/theming/src/components/admin/FileInputField.vue
@@ -68,7 +68,7 @@ import { loadState } from '@nextcloud/initial-state'
import NcButton from '@nextcloud/vue/components/NcButton'
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
-import Delete from 'vue-material-design-icons/Delete.vue'
+import Delete from 'vue-material-design-icons/DeleteOutline.vue'
import Undo from 'vue-material-design-icons/UndoVariant.vue'
import Upload from 'vue-material-design-icons/Upload.vue'
diff --git a/apps/updatenotification/src/components/UpdateNotification.vue b/apps/updatenotification/src/components/UpdateNotification.vue
index 3ba6bf5bd69..94c58dbdfd9 100644
--- a/apps/updatenotification/src/components/UpdateNotification.vue
+++ b/apps/updatenotification/src/components/UpdateNotification.vue
@@ -178,7 +178,7 @@ import IconChevronDown from 'vue-material-design-icons/ChevronDown.vue'
import IconCloudCheckVariant from 'vue-material-design-icons/CloudCheckVariant.vue'
import IconLink from 'vue-material-design-icons/Link.vue'
import IconNewBox from 'vue-material-design-icons/NewBox.vue'
-import IconPencil from 'vue-material-design-icons/Pencil.vue'
+import IconPencil from 'vue-material-design-icons/PencilOutline.vue'
import IconSourceBranch from 'vue-material-design-icons/SourceBranch.vue'
import IconStar from 'vue-material-design-icons/Star.vue'
import IconWeatherNight from 'vue-material-design-icons/WeatherNight.vue'
diff --git a/apps/weather_status/l10n/sw.js b/apps/weather_status/l10n/sw.js
new file mode 100644
index 00000000000..7928eb4db94
--- /dev/null
+++ b/apps/weather_status/l10n/sw.js
@@ -0,0 +1,63 @@
+OC.L10N.register(
+ "weather_status",
+ {
+ "Unknown address" : "Anwani isiyojulikana",
+ "No result." : "Hakuna matokeo",
+ "Malformed JSON data." : "Takwimu za JSON zilizoharibika.",
+ "Error" : "Hitilafu",
+ "Weather status" : "Hali ya hali ya hewa",
+ "Weather status in your dashboard" : "Hali ya hewa kwenye dashibodi yako",
+ "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." : "Hali ya hali ya hewa imeunganishwa katika programu ya Dashibodi.\nEneo la kijiografia linaweza kuamuliwa kiotomatiki au kufafanuliwa kwa mikono. Utabiri wa saa 6 kisha utaonyeshwa.\nHali hii pia inaweza kuunganishwa katika maeneo mengine kama vile programu ya Kalenda.",
+ "{temperature} {unit} clear sky later today" : "{temperature} {unit} anga safi baadaye leo",
+ "{temperature} {unit} clear sky" : "{temperature} {unit}anga safi ",
+ "{temperature} {unit} cloudy later today" : "{temperature} {unit}mawingu baadeye leo ",
+ "{temperature} {unit} cloudy" : "{temperature} {unit}mawingu",
+ "{temperature} {unit} snow and thunder later today" : "{temperature} {unit} theluji na radi baadaye leo ",
+ "{temperature} {unit} snow and thunder" : "{temperature} {unit}theluji na radi ",
+ "{temperature} {unit} snow showers and thunder later today" : "{temperature} {unit} manyunyu ya theluji na radi baadaye leo",
+ "{temperature} {unit} snow showers and thunder" : "{temperature} {unit} manyunyu ya theluji na radi ",
+ "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature} {unit} manyunyu ya theluji, radi na mwangu hafifu wa ncha za dunia baadaye leo",
+ "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature} {unit}manyunyu ya theluji, radi na mwangu hafifu wa ncha za dunia ",
+ "{temperature} {unit} snow showers later today" : "{temperature} {unit} manyunyu ya theluji baadaye leo",
+ "{temperature} {unit} snow showers" : "{temperature} {unit}manyunyu ya theluji ",
+ "{temperature} {unit} snow showers and polar twilight later today" : "{temperature} {unit} manyunyu ya theluji na machweo ya ncha za dunia baadaye leo",
+ "{temperature} {unit} snow showers and polar twilight" : "{temperature} {unit}manyunyu ya theluji na machweo ya ncha za dunia",
+ "{temperature} {unit} snow later today" : "{temperature} {unit}theluji baadaye leo ",
+ "{temperature} {unit} snow" : "{temperature} {unit}theluji",
+ "{temperature} {unit} fair weather later today" : "{temperature} {unit}hali ya hewa nzuri baadaye leo",
+ "{temperature} {unit} fair weather" : "{temperature} {unit} hali ya hewa nzuri",
+ "{temperature} {unit} partly cloudy later today" : "{temperature} {unit}mawingu sehemu baadaye leo ",
+ "{temperature} {unit} partly cloudy" : "{temperature} {unit}mawingu sehemu ",
+ "{temperature} {unit} foggy later today" : "{temperature} {unit}ukungu baadaye leo ",
+ "{temperature} {unit} foggy" : "{temperature} {unit}ukungu ",
+ "{temperature} {unit} light rainfall later today" : "{temperature} {unit}mvua nyepesi baadaye leo ",
+ "{temperature} {unit} light rainfall" : "{temperature} {unit}mvua nyepesi ",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit}mvua baadaye leo ",
+ "{temperature} {unit} rainfall" : "{temperature} {unit} mvua",
+ "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} mvua kubwa baadaye leo",
+ "{temperature} {unit} heavy rainfall" : "{temperature} {unit} mvua kubwa",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} mvua ya manyunyu baadaye leo",
+ "{temperature} {unit} rainfall showers" : "{temperature} {unit}mvua ya manyunyu",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} manyunyu ya mvua nyepesi baadaye leo",
+ "{temperature} {unit} light rainfall showers" : "{temperature} {unit}manyunyu ya mvua nyepesi",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} manyunyu ya mvua kubwa leo baadaye",
+ "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit}manyunyu ya mvua kubwa",
+ "More weather for {adr}" : " Hali ya hewa zaidi kwa {adr}",
+ "Loading weather" : "Inapakia hali ya hewa",
+ "Set location for weather" : "Weka eneo kwa hali ya hewa",
+ "Remove from favorites" : "Ondoa kutoka katika pendwa",
+ "Add as favorite" : "Ongeza kama kipendwa",
+ "You are not logged in." : "Hujaingia kwenye akaunti.",
+ "There was an error getting the weather status information." : "Kulikuwa na hitilafu kupata taarifa za hali ya hewa.",
+ "No weather information found" : "Hakuna taarifa za hali ya hewa zilizopatikana",
+ "Location not found" : "Mahali hapajulikani",
+ "There was an error setting the location address." : "Kulikuwa na hitilafu katika kuweka anwani ya eneo.",
+ "There was an error setting the location." : "Kulikuwa na hitilafu katika kuweka eneo.",
+ "There was an error saving the mode." : "Kulikuwa na hitilafu katika kuhifadhi hali.",
+ "There was an error using personal address." : "Kulikuwa na hitilafu katika kutumia anwani ya kibinafsi.",
+ "Unknown weather code" : "Msimbo wa hali ya hewa usiojulikana",
+ "Detect location" : "Tambua eneo",
+ "Set custom address" : "Weka anwani maalum",
+ "Favorites" : "Vipendwa"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/weather_status/l10n/sw.json b/apps/weather_status/l10n/sw.json
new file mode 100644
index 00000000000..985b7b4f15f
--- /dev/null
+++ b/apps/weather_status/l10n/sw.json
@@ -0,0 +1,61 @@
+{ "translations": {
+ "Unknown address" : "Anwani isiyojulikana",
+ "No result." : "Hakuna matokeo",
+ "Malformed JSON data." : "Takwimu za JSON zilizoharibika.",
+ "Error" : "Hitilafu",
+ "Weather status" : "Hali ya hali ya hewa",
+ "Weather status in your dashboard" : "Hali ya hewa kwenye dashibodi yako",
+ "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." : "Hali ya hali ya hewa imeunganishwa katika programu ya Dashibodi.\nEneo la kijiografia linaweza kuamuliwa kiotomatiki au kufafanuliwa kwa mikono. Utabiri wa saa 6 kisha utaonyeshwa.\nHali hii pia inaweza kuunganishwa katika maeneo mengine kama vile programu ya Kalenda.",
+ "{temperature} {unit} clear sky later today" : "{temperature} {unit} anga safi baadaye leo",
+ "{temperature} {unit} clear sky" : "{temperature} {unit}anga safi ",
+ "{temperature} {unit} cloudy later today" : "{temperature} {unit}mawingu baadeye leo ",
+ "{temperature} {unit} cloudy" : "{temperature} {unit}mawingu",
+ "{temperature} {unit} snow and thunder later today" : "{temperature} {unit} theluji na radi baadaye leo ",
+ "{temperature} {unit} snow and thunder" : "{temperature} {unit}theluji na radi ",
+ "{temperature} {unit} snow showers and thunder later today" : "{temperature} {unit} manyunyu ya theluji na radi baadaye leo",
+ "{temperature} {unit} snow showers and thunder" : "{temperature} {unit} manyunyu ya theluji na radi ",
+ "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature} {unit} manyunyu ya theluji, radi na mwangu hafifu wa ncha za dunia baadaye leo",
+ "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature} {unit}manyunyu ya theluji, radi na mwangu hafifu wa ncha za dunia ",
+ "{temperature} {unit} snow showers later today" : "{temperature} {unit} manyunyu ya theluji baadaye leo",
+ "{temperature} {unit} snow showers" : "{temperature} {unit}manyunyu ya theluji ",
+ "{temperature} {unit} snow showers and polar twilight later today" : "{temperature} {unit} manyunyu ya theluji na machweo ya ncha za dunia baadaye leo",
+ "{temperature} {unit} snow showers and polar twilight" : "{temperature} {unit}manyunyu ya theluji na machweo ya ncha za dunia",
+ "{temperature} {unit} snow later today" : "{temperature} {unit}theluji baadaye leo ",
+ "{temperature} {unit} snow" : "{temperature} {unit}theluji",
+ "{temperature} {unit} fair weather later today" : "{temperature} {unit}hali ya hewa nzuri baadaye leo",
+ "{temperature} {unit} fair weather" : "{temperature} {unit} hali ya hewa nzuri",
+ "{temperature} {unit} partly cloudy later today" : "{temperature} {unit}mawingu sehemu baadaye leo ",
+ "{temperature} {unit} partly cloudy" : "{temperature} {unit}mawingu sehemu ",
+ "{temperature} {unit} foggy later today" : "{temperature} {unit}ukungu baadaye leo ",
+ "{temperature} {unit} foggy" : "{temperature} {unit}ukungu ",
+ "{temperature} {unit} light rainfall later today" : "{temperature} {unit}mvua nyepesi baadaye leo ",
+ "{temperature} {unit} light rainfall" : "{temperature} {unit}mvua nyepesi ",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit}mvua baadaye leo ",
+ "{temperature} {unit} rainfall" : "{temperature} {unit} mvua",
+ "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} mvua kubwa baadaye leo",
+ "{temperature} {unit} heavy rainfall" : "{temperature} {unit} mvua kubwa",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} mvua ya manyunyu baadaye leo",
+ "{temperature} {unit} rainfall showers" : "{temperature} {unit}mvua ya manyunyu",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} manyunyu ya mvua nyepesi baadaye leo",
+ "{temperature} {unit} light rainfall showers" : "{temperature} {unit}manyunyu ya mvua nyepesi",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} manyunyu ya mvua kubwa leo baadaye",
+ "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit}manyunyu ya mvua kubwa",
+ "More weather for {adr}" : " Hali ya hewa zaidi kwa {adr}",
+ "Loading weather" : "Inapakia hali ya hewa",
+ "Set location for weather" : "Weka eneo kwa hali ya hewa",
+ "Remove from favorites" : "Ondoa kutoka katika pendwa",
+ "Add as favorite" : "Ongeza kama kipendwa",
+ "You are not logged in." : "Hujaingia kwenye akaunti.",
+ "There was an error getting the weather status information." : "Kulikuwa na hitilafu kupata taarifa za hali ya hewa.",
+ "No weather information found" : "Hakuna taarifa za hali ya hewa zilizopatikana",
+ "Location not found" : "Mahali hapajulikani",
+ "There was an error setting the location address." : "Kulikuwa na hitilafu katika kuweka anwani ya eneo.",
+ "There was an error setting the location." : "Kulikuwa na hitilafu katika kuweka eneo.",
+ "There was an error saving the mode." : "Kulikuwa na hitilafu katika kuhifadhi hali.",
+ "There was an error using personal address." : "Kulikuwa na hitilafu katika kutumia anwani ya kibinafsi.",
+ "Unknown weather code" : "Msimbo wa hali ya hewa usiojulikana",
+ "Detect location" : "Tambua eneo",
+ "Set custom address" : "Weka anwani maalum",
+ "Favorites" : "Vipendwa"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file