feat(settings): add pagination to imports and exports pages (#598)

* feat(settings): split imports and exports

* feat(security): sanitize pagination params to prevent abuse

* fix(settings): fix syntax in settings nav

* feat(settings): internationalize family_exports and imports UI strings

* fix(settings): fix coderabbit review

* fix(settings): fix coderabbit review

* fix(settings): fix coderabbit review

* Change default per_page value from 20 to 10

Signed-off-by: Juan José Mata <jjmata@jjmata.com>

* Add `/family_export` to navigation

* Consistency with old defaults

* Align `safe_per_page` even if not DRY

---------

Signed-off-by: Julien Orain <julien.orain@gmail.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: JulienOrain <your-github-email@example.com>
Co-authored-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
Julien Orain
2026-01-20 00:11:22 +01:00
committed by GitHub
parent 3d91e60a8a
commit 777fbdc4ca
51 changed files with 353 additions and 105 deletions

View File

@@ -0,0 +1,6 @@
---
ca:
breadcrumbs:
exports: Exportacions
home: Inici
imports: Importacions

View File

@@ -0,0 +1,6 @@
---
de:
breadcrumbs:
exports: Exporte
home: Startseite
imports: Importe

View File

@@ -0,0 +1,6 @@
---
en:
breadcrumbs:
exports: Exports
home: Home
imports: Imports

View File

@@ -0,0 +1,6 @@
---
es:
breadcrumbs:
exports: Exportaciones
home: Inicio
imports: Importaciones

View File

@@ -0,0 +1,6 @@
---
nb:
breadcrumbs:
exports: Eksporter
home: Hjem
imports: Importer

View File

@@ -0,0 +1,6 @@
---
pt-BR:
breadcrumbs:
exports: Exportações
home: Início
imports: Importações

View File

@@ -0,0 +1,6 @@
---
ro:
breadcrumbs:
exports: Exporturi
home: Acasă
imports: Importuri

View File

@@ -0,0 +1,6 @@
---
tr:
breadcrumbs:
exports: Dışa Aktarmalar
home: Ana Sayfa
imports: İçe Aktarmalar

View File

@@ -0,0 +1,6 @@
---
zh-CN:
breadcrumbs:
exports: 导出
home: 主页
imports: 导入

View File

@@ -1,7 +1,22 @@
---
ca:
family_exports:
access_denied: Accés denegat
create:
success: Exportació iniciada. Podràs descarregar-la aviat.
delete_confirmation: Estàs segur que vols eliminar aquesta exportació? Aquesta acció no es pot desfer.
delete_failed_confirmation: Estàs segur que vols eliminar aquesta exportació fallida?
destroy:
success: Exportació eliminada amb èxit
export_not_ready: L'exportació no està llesta per descarregar
exporting: Exportant...
index:
title: Exportacions
new: Nova exportació
no_exports: Encara no hi ha exportacions.
list:
export_from: "Exportació del %{date}"
in_progress: En curs
complete: Completat
failed: Error
in_progress: En curs

View File

@@ -1,7 +1,21 @@
---
de:
family_exports:
access_denied: Zugriff verweigert
create:
success: Export gestartet. Sie können ihn in Kürze herunterladen.
delete_confirmation: Möchten Sie diesen Export wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.
delete_failed_confirmation: Möchten Sie diesen fehlgeschlagenen Export wirklich löschen?
destroy:
success: Export erfolgreich gelöscht
export_not_ready: Export noch nicht zum Download bereit
exporting: Wird exportiert...
index:
title: Exporte
new: Neuer Export
no_exports: Noch keine Exporte vorhanden.
list:
export_from: "Export vom %{date}"
in_progress: Wird ausgeführt
complete: Abgeschlossen
failed: Fehlgeschlagen

View File

@@ -1,7 +1,21 @@
---
en:
family_exports:
access_denied: Access denied
create:
success: Export started. You'll be able to download it shortly.
delete_confirmation: Are you sure you want to delete this export? This action cannot be undone.
delete_failed_confirmation: Are you sure you want to delete this failed export?
destroy:
success: Export deleted successfully
export_not_ready: Export not ready for download
exporting: Exporting...
index:
title: Exports
new: New Export
no_exports: No exports yet.
list:
export_from: "Export from %{date}"
in_progress: In progress
complete: Complete
failed: Failed

View File

@@ -1,7 +1,21 @@
---
es:
family_exports:
access_denied: Acceso denegado
create:
success: Exportación iniciada. Podrás descargarla en breve.
delete_confirmation: ¿Estás seguro de que quieres eliminar esta exportación? Esta acción no se puede deshacer.
delete_failed_confirmation: ¿Estás seguro de que quieres eliminar esta exportación fallida?
destroy:
success: Exportación eliminada con éxito
export_not_ready: La exportación no está lista para descargar
exporting: Exportando...
index:
title: Exportaciones
new: Nueva exportación
no_exports: Aún no hay exportaciones.
list:
export_from: "Exportación del %{date}"
in_progress: En progreso
complete: Completo
failed: Fallido

View File

@@ -1,7 +1,21 @@
---
nb:
family_exports:
access_denied: Tilgang nektet
create:
success: Eksport startet. Du vil kunne laste den ned snart.
delete_confirmation: Er du sikker på at du vil slette denne eksporten? Denne handlingen kan ikke angres.
delete_failed_confirmation: Er du sikker på at du vil slette denne mislykkede eksporten?
destroy:
success: Eksport slettet
export_not_ready: Eksport ikke klar for nedlasting
exporting: Eksporterer...
index:
title: Eksporter
new: Ny Eksport
no_exports: Ingen eksporter ennå.
list:
export_from: "Eksport fra %{date}"
in_progress: Pågår
complete: Fullført
failed: Mislykket

View File

@@ -1,7 +1,21 @@
---
pt-BR:
family_exports:
access_denied: Acesso negado
create:
success: Exportação iniciada. Você poderá baixá-la em breve.
delete_confirmation: Tem certeza de que deseja excluir esta exportação? Esta ação não pode ser desfeita.
delete_failed_confirmation: Tem certeza de que deseja excluir esta exportação falhada?
destroy:
success: Exportação excluída com sucesso
export_not_ready: Exportação não está pronta para download
exporting: Exportando...
index:
title: Exportações
new: Nova Exportação
no_exports: Nenhuma exportação ainda.
list:
in_progress: Em andamento
export_from: "Exportação de %{date}"
in_progress: Em andamento
complete: Concluído
failed: Falhou

View File

@@ -1,7 +1,21 @@
---
ro:
family_exports:
access_denied: Acces interzis
create:
success: Export început. Veți putea să-l descărcați în curând.
delete_confirmation: Sigur doriți să ștergeți acest export? Această acțiune nu poate fi anulată.
delete_failed_confirmation: Sigur doriți să ștergeți acest export eșuat?
destroy:
success: Export șters cu succes
export_not_ready: Exportul nu este gata pentru descărcare
exporting: Se exportă...
index:
title: Exporturi
new: Export nou
no_exports: Nu există încă exporturi.
list:
export_from: "Export din %{date}"
in_progress: În curs de desfășurare
complete: Finalizat
failed: Eșuat

View File

@@ -1,7 +1,21 @@
---
tr:
family_exports:
access_denied: Erişim reddedildi
create:
success: Dışa aktarma başladı. Kısa süre içinde indirebileceksiniz.
delete_confirmation: Bu dışa aktarma işlemini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.
delete_failed_confirmation: Bu başarısız dışa aktarma işlemini silmek istediğinizden emin misiniz?
destroy:
success: Dışa aktarma başarıyla silindi
export_not_ready: Dışa aktarma henüz indirmeye hazır değil
exporting: Dışa aktarılıyor...
index:
title: Dışa aktarmalar
new: Yeni Dışa Aktarma
no_exports: Henüz hiç dışa aktarma yok.
list:
export_from: "%{date} tarihli dışa aktarma"
in_progress: Devam ediyor
complete: Tamamlandı
failed: Başarısız

View File

@@ -1,7 +1,21 @@
---
zh-CN:
family_exports:
access_denied: 访问被拒绝
create:
success: 导出已开始。您很快就能下载它。
delete_confirmation: 确定要删除此导出吗?此操作无法撤销。
delete_failed_confirmation: 确定要删除此失败的导出吗?
destroy:
success: 导出已成功删除
export_not_ready: 导出尚未准备好下载
exporting: 正在导出...
index:
title: 导出
new: 新建导出
no_exports: 暂无导出记录
list:
export_from: "导出自 %{date}"
complete: 已完成
failed: 已失败
in_progress: 进行中

View File

@@ -1,6 +1,12 @@
---
zh-TW:
family_exports:
access_denied: 存取被拒絕
create:
success: 匯出已開始。您很快就能下載它。
destroy:
success: 匯出已成功刪除
export_not_ready: 匯出尚未準備好下載
list:
complete: 已完成
failed: 已失敗

View File

@@ -84,12 +84,12 @@ ca:
uploading: Processant files
view: Veure
index:
title: Importacions
new: Nova importació
exports: Exportacions
imports: Importacions
new: Nova importació
new_export: Nova exportació
no_exports: Encara no hi ha exportacions.
title: Importa/Exporta
new:
description: Pots importar manualment diversos tipus de dades via CSV o utilitzar
una de les nostres plantilles d'importació com Mint.

View File

@@ -58,12 +58,8 @@ de:
uploading: Zeilen werden verarbeitet
view: Anzeigen
index:
imports: Importe
title: Importe
new: Neuer Import
title: Import/Export
exports: Exporte
new_export: Neuer Export
no_exports: Noch keine Exporte vorhanden.
new:
description: Du kannst verschiedene Datentypen manuell über CSV importieren oder eine unserer Importvorlagen wie Mint verwenden.
import_accounts: Konten importieren

View File

@@ -83,12 +83,8 @@ en:
uploading: Processing rows
view: View
index:
imports: Imports
title: Imports
new: New Import
title: Import/Export
exports: Exports
new_export: New Export
no_exports: No exports yet.
new:
description: You can manually import various types of data via CSV or use one
of our import templates like Mint.

View File

@@ -62,12 +62,8 @@ es:
uploading: Procesando filas
view: Ver
index:
imports: Importaciones
title: Importaciones
new: Nueva importación
title: Importar/Exportar
exports: Exportaciones
new_export: Nueva exportación
no_exports: Aún no hay exportaciones.
new:
description: Puedes importar manualmente varios tipos de datos mediante CSV o usar una de nuestras plantillas de importación como Mint.
import_accounts: Importar cuentas

View File

@@ -71,12 +71,8 @@ nb:
uploading: Behandler rader
view: Vis
index:
imports: Importer
new: Ny Import
title: Importer
exports: Eksporter
new_export: Ny Eksport
no_exports: Ingen eksporter ennå.
new: Ny Import
new:
description: Du kan manuelt importere ulike typer data via CSV eller bruke en av
våre importmaler som Mint.

View File

@@ -76,12 +76,8 @@ pt-BR:
uploading: Processando linhas
view: Visualizar
index:
imports: Importações
title: Importações
new: Nova Importação
title: Importar/Exportar
exports: Exportações
new_export: Nova Exportação
no_exports: Nenhuma exportação ainda.
new:
description: Você pode importar manualmente vários tipos de dados via CSV ou usar um
de nossos modelos de importação, como o do Mint.

View File

@@ -58,12 +58,8 @@ ro:
uploading: Se procesează rândurile
view: Vezi
index:
imports: Importuri
title: Importuri
new: Import nou
title: Import/Export
exports: Exporturi
new_export: Export nou
no_exports: Nu există încă exporturi.
new:
description: Poți importa manual diverse tipuri de date prin CSV sau poți folosi unul dintre șabloanele noastre de import, cum ar fi Mint.
import_accounts: Importă conturi

View File

@@ -58,12 +58,8 @@ tr:
uploading: Satırlar işleniyor
view: Görüntüle
index:
imports: İçe aktarmalar
new: Yeni İçe Aktarma
title: İçe aktarmalar
exports: Dışa aktarmalar
new_export: Yeni Dışa Aktarma
no_exports: Henüz hiç dışa aktarma yok.
new: Yeni İçe Aktarma
new:
description: Farklı veri türlerini CSV ile manuel olarak içe aktarabilir veya Mint gibi içe aktarma şablonlarımızı kullanabilirsiniz.
import_accounts: Hesapları içe aktar

View File

@@ -66,12 +66,8 @@ zh-CN:
uploading: 处理行数据中
view: 查看
index:
exports: 记录
imports: 导入记录
title: 记录
new: 新建导入
new_export: 新建导出
no_exports: 暂无导出记录
title: 导入/导出管理
new:
description: 您可以通过 CSV 手动导入多种类型数据,或使用我们的导入模板(如 Mint 格式)。
import_accounts: 导入账户

View File

@@ -127,8 +127,9 @@ ca:
categories_label: Categories
feedback_label: Feedback
general_section_title: General
imports_label: Importacions
exports_label: Exportacions
guides_label: Guies
imports_label: Importa/Exporta
logout: Tanca la sessió
merchants_label: Comerços
other_section_title: Més

View File

@@ -94,7 +94,8 @@ de:
categories_label: Kategorien
feedback_label: Feedback
general_section_title: Allgemein
imports_label: Import/Export
imports_label: Importe
exports_label: Exporte
logout: Abmelden
merchants_label: Händler
guides_label: Anleitungen

View File

@@ -115,7 +115,8 @@ en:
categories_label: Categories
feedback_label: Feedback
general_section_title: General
imports_label: Import/Export
imports_label: Imports
exports_label: Exports
logout: Logout
merchants_label: Merchants
guides_label: Guides

View File

@@ -95,7 +95,8 @@ es:
categories_label: Categorías
feedback_label: Comentarios
general_section_title: General
imports_label: Importar/Exportar
imports_label: Importaciones
exports_label: Exportaciones
logout: Cerrar sesión
merchants_label: Comerciantes
guides_label: Guías

View File

@@ -81,6 +81,7 @@ nb:
feedback_label: Tilbakemelding
general_section_title: Generelt
imports_label: Importer
exports_label: Eksporter
logout: Logg ut
merchants_label: Forhandlere
other_section_title: Mer

View File

@@ -91,6 +91,7 @@ pt-BR:
feedback_label: Feedback
general_section_title: Geral
imports_label: Importações
exports_label: Exportações
logout: Sair
merchants_label: Comerciantes
other_section_title: Mais

View File

@@ -98,7 +98,8 @@ ro:
categories_label: Categorii
feedback_label: Feedback
general_section_title: General
imports_label: Import/Export
imports_label: Importuri
exports_label: Exporturi
logout: Logout
merchants_label: Comercianți
guides_label: Ghiduri

View File

@@ -101,7 +101,8 @@ zh-CN:
feedback_label: 意见反馈
general_section_title: 通用设置
guides_label: 使用指南
imports_label: 导入/导出
imports_label: 导入记录
exports_label: 导出记录
logout: 退出登录
merchants_label: 商户管理
other_section_title: 更多设置