feat(collections): select toolbar — select-all, move/duplicate to another list (#1081)

- The select toggle now sits at the right of the filter row (same height as the
  status/category dropdowns) instead of the top toolbar.
- Select mode gains a "select all / deselect all" toggle and shows even with
  nothing selected yet.
- Selected places can be moved or duplicated into another of your lists via a
  target-list picker (move re-points collection_id; duplicate re-saves the place
  data, carrying description / category / notes / etc.).
- New strings across all 22 locales.
This commit is contained in:
Maurice
2026-07-01 15:07:39 +02:00
committed by Maurice
parent 3198fd35eb
commit 6be8a67c82
28 changed files with 455 additions and 18 deletions
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'تحديد',
'collections.selectAll': 'تحديد الكل',
'collections.deselectAll': 'إلغاء التحديد',
'collections.moveToList': 'نقل إلى قائمة',
'collections.duplicateToList': 'تكرار إلى قائمة',
'collections.moveToListTitle': 'نقل {count} إلى قائمة أخرى',
'collections.duplicateToListTitle': 'تكرار {count} إلى قائمة أخرى',
'collections.noOtherLists': 'لا توجد قوائم أخرى بعد',
'collections.movedCount': 'تم نقل {count} أماكن',
'collections.duplicatedCount': 'تم تكرار {count} أماكن',
'collections.placeCount': '{count} أماكن',
'collections.category': 'الفئة',
'collections.noCategory': 'بدون فئة',
'collections.editListTitle': 'تعديل القائمة',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Selecionar',
'collections.selectAll': 'Selecionar tudo',
'collections.deselectAll': 'Desmarcar tudo',
'collections.moveToList': 'Mover para lista',
'collections.duplicateToList': 'Duplicar em lista',
'collections.moveToListTitle': 'Mover {count} para outra lista',
'collections.duplicateToListTitle': 'Duplicar {count} em outra lista',
'collections.noOtherLists': 'Nenhuma outra lista ainda',
'collections.movedCount': '{count} lugares movidos',
'collections.duplicatedCount': '{count} lugares duplicados',
'collections.placeCount': '{count} lugares',
'collections.category': 'Categoria',
'collections.noCategory': 'Sem categoria',
'collections.editListTitle': 'Editar lista',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Vybrat',
'collections.selectAll': 'Vybrat vše',
'collections.deselectAll': 'Zrušit výběr',
'collections.moveToList': 'Přesunout do seznamu',
'collections.duplicateToList': 'Duplikovat do seznamu',
'collections.moveToListTitle': 'Přesunout {count} do jiného seznamu',
'collections.duplicateToListTitle': 'Duplikovat {count} do jiného seznamu',
'collections.noOtherLists': 'Zatím žádné další seznamy',
'collections.movedCount': 'Přesunuto {count} míst',
'collections.duplicatedCount': 'Duplikováno {count} míst',
'collections.placeCount': '{count} míst',
'collections.category': 'Kategorie',
'collections.noCategory': 'Bez kategorie',
'collections.editListTitle': 'Upravit seznam',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Auswählen',
'collections.selectAll': 'Alle auswählen',
'collections.deselectAll': 'Auswahl aufheben',
'collections.moveToList': 'In Liste verschieben',
'collections.duplicateToList': 'In Liste duplizieren',
'collections.moveToListTitle': '{count} in andere Liste verschieben',
'collections.duplicateToListTitle': '{count} in andere Liste duplizieren',
'collections.noOtherLists': 'Noch keine anderen Listen',
'collections.movedCount': '{count} Orte verschoben',
'collections.duplicatedCount': '{count} Orte dupliziert',
'collections.placeCount': '{count} Orte',
'collections.category': 'Kategorie',
'collections.noCategory': 'Keine Kategorie',
'collections.editListTitle': 'Liste bearbeiten',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Select',
'collections.selectAll': 'Select all',
'collections.deselectAll': 'Deselect all',
'collections.moveToList': 'Move to list',
'collections.duplicateToList': 'Duplicate to list',
'collections.moveToListTitle': 'Move {count} to another list',
'collections.duplicateToListTitle': 'Duplicate {count} to another list',
'collections.noOtherLists': 'No other lists yet',
'collections.movedCount': 'Moved {count} places',
'collections.duplicatedCount': 'Duplicated {count} places',
'collections.placeCount': '{count} places',
'collections.category': 'Category',
'collections.noCategory': 'No category',
'collections.editListTitle': 'Edit list',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Seleccionar',
'collections.selectAll': 'Seleccionar todo',
'collections.deselectAll': 'Deseleccionar todo',
'collections.moveToList': 'Mover a lista',
'collections.duplicateToList': 'Duplicar en lista',
'collections.moveToListTitle': 'Mover {count} a otra lista',
'collections.duplicateToListTitle': 'Duplicar {count} en otra lista',
'collections.noOtherLists': 'Aún no hay otras listas',
'collections.movedCount': 'Movidos {count} lugares',
'collections.duplicatedCount': 'Duplicados {count} lugares',
'collections.placeCount': '{count} lugares',
'collections.category': 'Categoría',
'collections.noCategory': 'Sin categoría',
'collections.editListTitle': 'Editar lista',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Sélectionner',
'collections.selectAll': 'Tout sélectionner',
'collections.deselectAll': 'Tout désélectionner',
'collections.moveToList': 'Déplacer vers une liste',
'collections.duplicateToList': 'Dupliquer dans une liste',
'collections.moveToListTitle': 'Déplacer {count} vers une autre liste',
'collections.duplicateToListTitle': 'Dupliquer {count} dans une autre liste',
'collections.noOtherLists': 'Aucune autre liste',
'collections.movedCount': '{count} lieux déplacés',
'collections.duplicatedCount': '{count} lieux dupliqués',
'collections.placeCount': '{count} lieux',
'collections.category': 'Catégorie',
'collections.noCategory': 'Aucune catégorie',
'collections.editListTitle': 'Modifier la liste',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Επιλογή',
'collections.selectAll': 'Επιλογή όλων',
'collections.deselectAll': 'Κατάργηση επιλογής',
'collections.moveToList': 'Μετακίνηση σε λίστα',
'collections.duplicateToList': 'Αντιγραφή σε λίστα',
'collections.moveToListTitle': 'Μετακίνηση {count} σε άλλη λίστα',
'collections.duplicateToListTitle': 'Αντιγραφή {count} σε άλλη λίστα',
'collections.noOtherLists': 'Δεν υπάρχουν άλλες λίστες',
'collections.movedCount': 'Μετακινήθηκαν {count} τοποθεσίες',
'collections.duplicatedCount': 'Αντιγράφηκαν {count} τοποθεσίες',
'collections.placeCount': '{count} τοποθεσίες',
'collections.category': 'Κατηγορία',
'collections.noCategory': 'Χωρίς κατηγορία',
'collections.editListTitle': 'Επεξεργασία λίστας',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Kijelölés',
'collections.selectAll': 'Összes kijelölése',
'collections.deselectAll': 'Kijelölés megszüntetése',
'collections.moveToList': 'Áthelyezés listába',
'collections.duplicateToList': 'Másolás listába',
'collections.moveToListTitle': '{count} áthelyezése másik listába',
'collections.duplicateToListTitle': '{count} másolása másik listába',
'collections.noOtherLists': 'Nincs még másik lista',
'collections.movedCount': '{count} hely áthelyezve',
'collections.duplicatedCount': '{count} hely másolva',
'collections.placeCount': '{count} hely',
'collections.category': 'Kategória',
'collections.noCategory': 'Nincs kategória',
'collections.editListTitle': 'Lista szerkesztése',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Pilih',
'collections.selectAll': 'Pilih semua',
'collections.deselectAll': 'Batalkan pilihan',
'collections.moveToList': 'Pindahkan ke daftar',
'collections.duplicateToList': 'Duplikat ke daftar',
'collections.moveToListTitle': 'Pindahkan {count} ke daftar lain',
'collections.duplicateToListTitle': 'Duplikat {count} ke daftar lain',
'collections.noOtherLists': 'Belum ada daftar lain',
'collections.movedCount': '{count} tempat dipindahkan',
'collections.duplicatedCount': '{count} tempat diduplikat',
'collections.placeCount': '{count} tempat',
'collections.category': 'Kategori',
'collections.noCategory': 'Tanpa kategori',
'collections.editListTitle': 'Edit daftar',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Seleziona',
'collections.selectAll': 'Seleziona tutto',
'collections.deselectAll': 'Deseleziona tutto',
'collections.moveToList': 'Sposta in lista',
'collections.duplicateToList': 'Duplica in lista',
'collections.moveToListTitle': 'Sposta {count} in un\'altra lista',
'collections.duplicateToListTitle': 'Duplica {count} in un\'altra lista',
'collections.noOtherLists': 'Nessun\'altra lista',
'collections.movedCount': 'Spostati {count} luoghi',
'collections.duplicatedCount': 'Duplicati {count} luoghi',
'collections.placeCount': '{count} luoghi',
'collections.category': 'Categoria',
'collections.noCategory': 'Nessuna categoria',
'collections.editListTitle': 'Modifica elenco',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': '選択',
'collections.selectAll': 'すべて選択',
'collections.deselectAll': '選択を解除',
'collections.moveToList': 'リストに移動',
'collections.duplicateToList': 'リストに複製',
'collections.moveToListTitle': '{count} 件を別のリストに移動',
'collections.duplicateToListTitle': '{count} 件を別のリストに複製',
'collections.noOtherLists': '他のリストはまだありません',
'collections.movedCount': '{count} 件の場所を移動しました',
'collections.duplicatedCount': '{count} 件の場所を複製しました',
'collections.placeCount': '{count} 件の場所',
'collections.category': 'カテゴリ',
'collections.noCategory': 'カテゴリなし',
'collections.editListTitle': 'リストを編集',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': '선택',
'collections.selectAll': '모두 선택',
'collections.deselectAll': '선택 해제',
'collections.moveToList': '목록으로 이동',
'collections.duplicateToList': '목록에 복제',
'collections.moveToListTitle': '{count}개를 다른 목록으로 이동',
'collections.duplicateToListTitle': '{count}개를 다른 목록에 복제',
'collections.noOtherLists': '다른 목록이 아직 없습니다',
'collections.movedCount': '{count}개 장소 이동됨',
'collections.duplicatedCount': '{count}개 장소 복제됨',
'collections.placeCount': '장소 {count}개',
'collections.category': '카테고리',
'collections.noCategory': '카테고리 없음',
'collections.editListTitle': '목록 편집',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Selecteren',
'collections.selectAll': 'Alles selecteren',
'collections.deselectAll': 'Selectie opheffen',
'collections.moveToList': 'Naar lijst verplaatsen',
'collections.duplicateToList': 'Naar lijst dupliceren',
'collections.moveToListTitle': '{count} naar andere lijst verplaatsen',
'collections.duplicateToListTitle': '{count} naar andere lijst dupliceren',
'collections.noOtherLists': 'Nog geen andere lijsten',
'collections.movedCount': '{count} plaatsen verplaatst',
'collections.duplicatedCount': '{count} plaatsen gedupliceerd',
'collections.placeCount': '{count} plaatsen',
'collections.category': 'Categorie',
'collections.noCategory': 'Geen categorie',
'collections.editListTitle': 'Lijst bewerken',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Zaznacz',
'collections.selectAll': 'Zaznacz wszystko',
'collections.deselectAll': 'Odznacz wszystko',
'collections.moveToList': 'Przenieś do listy',
'collections.duplicateToList': 'Duplikuj do listy',
'collections.moveToListTitle': 'Przenieś {count} do innej listy',
'collections.duplicateToListTitle': 'Duplikuj {count} do innej listy',
'collections.noOtherLists': 'Brak innych list',
'collections.movedCount': 'Przeniesiono {count} miejsc',
'collections.duplicatedCount': 'Zduplikowano {count} miejsc',
'collections.placeCount': '{count} miejsc',
'collections.category': 'Kategoria',
'collections.noCategory': 'Bez kategorii',
'collections.editListTitle': 'Edytuj listę',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Выбрать',
'collections.selectAll': 'Выбрать все',
'collections.deselectAll': 'Снять выделение',
'collections.moveToList': 'Переместить в список',
'collections.duplicateToList': 'Дублировать в список',
'collections.moveToListTitle': 'Переместить {count} в другой список',
'collections.duplicateToListTitle': 'Дублировать {count} в другой список',
'collections.noOtherLists': 'Других списков пока нет',
'collections.movedCount': 'Перемещено мест: {count}',
'collections.duplicatedCount': 'Продублировано мест: {count}',
'collections.placeCount': '{count} мест',
'collections.category': 'Категория',
'collections.noCategory': 'Без категории',
'collections.editListTitle': 'Изменить список',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Välj',
'collections.selectAll': 'Välj alla',
'collections.deselectAll': 'Avmarkera alla',
'collections.moveToList': 'Flytta till lista',
'collections.duplicateToList': 'Duplicera till lista',
'collections.moveToListTitle': 'Flytta {count} till annan lista',
'collections.duplicateToListTitle': 'Duplicera {count} till annan lista',
'collections.noOtherLists': 'Inga andra listor än',
'collections.movedCount': 'Flyttade {count} platser',
'collections.duplicatedCount': 'Duplicerade {count} platser',
'collections.placeCount': '{count} platser',
'collections.category': 'Kategori',
'collections.noCategory': 'Ingen kategori',
'collections.editListTitle': 'Redigera lista',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Seç',
'collections.selectAll': 'Tümünü seç',
'collections.deselectAll': 'Seçimi kaldır',
'collections.moveToList': 'Listeye taşı',
'collections.duplicateToList': 'Listeye çoğalt',
'collections.moveToListTitle': '{count} öğeyi başka listeye taşı',
'collections.duplicateToListTitle': '{count} öğeyi başka listeye çoğalt',
'collections.noOtherLists': 'Henüz başka liste yok',
'collections.movedCount': '{count} yer taşındı',
'collections.duplicatedCount': '{count} yer çoğaltıldı',
'collections.placeCount': '{count} yer',
'collections.category': 'Kategori',
'collections.noCategory': 'Kategori yok',
'collections.editListTitle': 'Listeyi düzenle',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Вибрати',
'collections.selectAll': 'Вибрати все',
'collections.deselectAll': 'Зняти вибір',
'collections.moveToList': 'Перемістити до списку',
'collections.duplicateToList': 'Дублювати до списку',
'collections.moveToListTitle': 'Перемістити {count} до іншого списку',
'collections.duplicateToListTitle': 'Дублювати {count} до іншого списку',
'collections.noOtherLists': 'Інших списків поки немає',
'collections.movedCount': 'Переміщено місць: {count}',
'collections.duplicatedCount': 'Продубльовано місць: {count}',
'collections.placeCount': '{count} місць',
'collections.category': 'Категорія',
'collections.noCategory': 'Без категорії',
'collections.editListTitle': 'Редагувати список',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': 'Chọn',
'collections.selectAll': 'Chọn tất cả',
'collections.deselectAll': 'Bỏ chọn tất cả',
'collections.moveToList': 'Chuyển vào danh sách',
'collections.duplicateToList': 'Sao chép vào danh sách',
'collections.moveToListTitle': 'Chuyển {count} sang danh sách khác',
'collections.duplicateToListTitle': 'Sao chép {count} sang danh sách khác',
'collections.noOtherLists': 'Chưa có danh sách nào khác',
'collections.movedCount': 'Đã chuyển {count} địa điểm',
'collections.duplicatedCount': 'Đã sao chép {count} địa điểm',
'collections.placeCount': '{count} địa điểm',
'collections.category': 'Danh mục',
'collections.noCategory': 'Không có danh mục',
'collections.editListTitle': 'Chỉnh sửa danh sách',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': '選擇',
'collections.selectAll': '全選',
'collections.deselectAll': '取消全選',
'collections.moveToList': '移動到清單',
'collections.duplicateToList': '複製到清單',
'collections.moveToListTitle': '將 {count} 個移動到其他清單',
'collections.duplicateToListTitle': '將 {count} 個複製到其他清單',
'collections.noOtherLists': '尚無其他清單',
'collections.movedCount': '已移動 {count} 個地點',
'collections.duplicatedCount': '已複製 {count} 個地點',
'collections.placeCount': '{count} 個地點',
'collections.category': '類別',
'collections.noCategory': '無類別',
'collections.editListTitle': '編輯清單',
+11
View File
@@ -1,6 +1,17 @@
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.select': '选择',
'collections.selectAll': '全选',
'collections.deselectAll': '取消全选',
'collections.moveToList': '移动到列表',
'collections.duplicateToList': '复制到列表',
'collections.moveToListTitle': '将 {count} 个移动到其他列表',
'collections.duplicateToListTitle': '将 {count} 个复制到其他列表',
'collections.noOtherLists': '暂无其他列表',
'collections.movedCount': '已移动 {count} 个地点',
'collections.duplicatedCount': '已复制 {count} 个地点',
'collections.placeCount': '{count} 个地点',
'collections.category': '类别',
'collections.noCategory': '无类别',
'collections.editListTitle': '编辑清单',