From b540b68706c7e10d5eca8947baeb5fc4323cb686 Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Wed, 28 Oct 2026 05:09:04 +0100 Subject: [PATCH] fix: tell an empty address book from an empty account, offer Import there, and use one empty state in Contacts and Files --- .../contacts/__tests__/contacts-app.test.tsx | 11 +++ components/contacts/contact-list.tsx | 72 +++++++++++-------- components/contacts/contacts-app.tsx | 2 + components/files/file-empty-state.tsx | 53 +++++++------- locales/ar/common.json | 2 + locales/ca/common.json | 2 + locales/cs/common.json | 2 + locales/da/common.json | 2 + locales/de/common.json | 2 + locales/en/common.json | 2 + locales/es/common.json | 2 + locales/et/common.json | 2 + locales/fa/common.json | 2 + locales/fr/common.json | 2 + locales/he/common.json | 2 + locales/hu/common.json | 2 + locales/it/common.json | 2 + locales/ja/common.json | 2 + locales/ko/common.json | 2 + locales/lv/common.json | 2 + locales/mn/common.json | 2 + locales/nb/common.json | 2 + locales/nl/common.json | 2 + locales/pl/common.json | 2 + locales/pt/common.json | 2 + locales/ro/common.json | 2 + locales/ru/common.json | 2 + locales/sk/common.json | 2 + locales/th/common.json | 2 + locales/tr/common.json | 2 + locales/uk/common.json | 2 + locales/zh-TW/common.json | 2 + locales/zh/common.json | 2 + 33 files changed, 138 insertions(+), 58 deletions(-) diff --git a/components/contacts/__tests__/contacts-app.test.tsx b/components/contacts/__tests__/contacts-app.test.tsx index f373cbb39..d7f304227 100644 --- a/components/contacts/__tests__/contacts-app.test.tsx +++ b/components/contacts/__tests__/contacts-app.test.tsx @@ -224,4 +224,15 @@ describe('ContactsApp', () => { window.matchMedia = matchMedia; } }); + + it('says an empty address book is empty, not that the account has no contacts, and offers Import', () => { + renderContacts([alice]); + act(() => { useContactStore.setState({ addressBooks: [{ id: 'b2', name: 'Work', isDefault: false } as never] }); }); + fireEvent.click(screen.getAllByRole('button', { name: 'open_categories' })[0]); + fireEvent.click(within(drawer()).getByText('Work')); + expect(screen.getByText('empty_view_title')).toBeInTheDocument(); + expect(screen.queryByText('empty_state_title')).toBeNull(); + fireEvent.click(screen.getByRole('button', { name: /import.title/ })); + expect(screen.getByRole('dialog', { name: 'import.title' })).toBeInTheDocument(); + }); }); diff --git a/components/contacts/contact-list.tsx b/components/contacts/contact-list.tsx index fa1bb9263..211d23968 100644 --- a/components/contacts/contact-list.tsx +++ b/components/contacts/contact-list.tsx @@ -2,9 +2,10 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useTranslations, useLocale } from "next-intl"; -import { Search, BookUser, Trash2, Users, Download, X, UserPlus, CheckSquare, Square, Filter, Mail, Phone, Image as ImageIcon, RotateCcw, Menu, ArrowDownAZ, Loader2, FolderInput } from "@/components/icons"; +import { Search, BookUser, Trash2, Users, Download, X, UserPlus, CheckSquare, Square, Filter, Mail, Phone, Image as ImageIcon, RotateCcw, Menu, ArrowDownAZ, Loader2, FolderInput, Upload } from "@/components/icons"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; +import { EmptyState } from "@/components/ui/empty-state"; import { IconButton } from "@/components/ui/icon-button"; import { ContactListItem } from "./contact-list-item"; import { ContactContextMenu } from "./contact-context-menu"; @@ -123,6 +124,9 @@ interface ContactListProps { onMoveContacts?: (ids: string[]) => void; /** Show a burger button at the start that opens the (overlay) categories sidebar. */ onMenuClick?: () => void; + /** The list shows one address book, category or group, not the whole account. */ + emptyView?: boolean; + onImport?: () => void; /** Contacts' own entries in the phone header's ⋮. */ phoneMenuItems?: (close: () => void) => React.ReactNode; /** The first fetch is still running: show placeholders, not "No contacts yet". */ @@ -153,6 +157,8 @@ export function ContactList({ onMoveContacts, onMenuClick, phoneMenuItems, + emptyView = false, + onImport, isLoading = false, }: ContactListProps) { const t = useTranslations("contacts"); @@ -651,21 +657,14 @@ export function ContactList({ ))} ) : sorted.length === 0 ? ( -
- {searchQuery || activeFilters > 0 ? ( - <> - {activeFilters > 0 && !searchQuery ? ( - - ) : ( - - )} -

- {searchQuery ? t("empty_search") : t("empty_filtered")} -

-

- {searchQuery ? t("empty_search_hint") : t("empty_filtered_hint")} -

-
+ searchQuery || activeFilters > 0 ? ( + 0 && !searchQuery ? Filter : Search} + title={searchQuery ? t("empty_search") : t("empty_filtered")} + description={searchQuery ? t("empty_search_hint") : t("empty_filtered_hint")} + actions={ + <> {searchQuery && ( )} -
- - ) : ( - <> - -

{t("empty_state_title")}

-

{t("empty_state_subtitle")}

- - - )} -
+ + } + /> + ) : ( + // The whole account is empty, or only the address book, category + // or group on screen: each says so, and both offer New and Import. + + + {onImport && ( + + )} + + } + /> + ) ) : ( (() => { const renderItem = (contact: ContactCard) => ( diff --git a/components/contacts/contacts-app.tsx b/components/contacts/contacts-app.tsx index 7012590b2..6fae16132 100644 --- a/components/contacts/contacts-app.tsx +++ b/components/contacts/contacts-app.tsx @@ -1294,6 +1294,8 @@ function ContactsAppContent({ linkSegments: routeSegments }: ContactsAppProps = onDuplicateContact={(contact) => void handleDuplicateContact(contact)} onMoveContacts={canMoveContacts ? handleMoveContacts : undefined} onMenuClick={isNarrow ? () => setNarrowSidebarOpen(true) : undefined} + emptyView={activeCategory !== "all"} + onImport={() => setShowImportDialog(true)} phoneMenuItems={(close) => ( // On the phone these are otherwise only in the drawer's "+". <> diff --git a/components/files/file-empty-state.tsx b/components/files/file-empty-state.tsx index 8d10930d7..87ca6a714 100644 --- a/components/files/file-empty-state.tsx +++ b/components/files/file-empty-state.tsx @@ -3,6 +3,7 @@ import { useTranslations } from "next-intl"; import { Upload, FolderPlus, FolderOpen, SearchX } from "@/components/icons"; import { Button } from "@/components/ui/button"; +import { EmptyState } from "@/components/ui/empty-state"; interface EmptyFolderProps { isRoot: boolean; @@ -15,39 +16,35 @@ interface EmptyFolderProps { export function EmptyFolder({ isRoot, canCreate, onUpload, onCreateFolder }: EmptyFolderProps) { const t = useTranslations("files"); return ( -
-
-
- {isRoot ? : } -
-

{isRoot ? t("empty_state_title") : t("empty_folder_title")}

-

- {canCreate ? t("empty_folder_description") : t("empty_folder_read_only")} -

- {canCreate && ( -
- - -
- )} -
-
+ + + + + ) : undefined} + /> ); } export function NoSearchResults({ query, onClear }: { query: string; onClear: () => void }) { const t = useTranslations("files"); return ( -
- -

{t("no_results_for", { query })}

- -
+ {t("clear_search")}} + /> ); } diff --git a/locales/ar/common.json b/locales/ar/common.json index 96d995dbc..e7cd02bb8 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -2949,6 +2949,8 @@ "empty_state": "لا توجد جهات اتصال بعد", "empty_state_title": "لا توجد جهات اتصال بعد", "empty_state_subtitle": "أنشئ أول جهة اتصال أو استوردها من ملف vCard", + "empty_view_title": "لا توجد جهات اتصال هنا", + "empty_view_hint": "أضف جهة اتصال أو استورد ملف vCard.", "empty_search": "لا توجد جهات اتصال مطابقة لبحثك", "empty_search_hint": "جرّب مصطلح بحث مختلف", "empty_filtered": "لا توجد جهات اتصال مطابقة لمرشحاتك", diff --git a/locales/ca/common.json b/locales/ca/common.json index 0e73dbb59..77de26ab3 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Encara no hi ha contactes", "empty_state_title": "Encara no hi ha contactes", "empty_state_subtitle": "Creeu el primer contacte o importeu-lo des d'un fitxer vCard", + "empty_view_title": "No hi ha contactes aquí", + "empty_view_hint": "Afegiu un contacte o importeu un fitxer vCard.", "empty_search": "Cap contacte coincideix amb la cerca", "empty_search_hint": "Proveu amb un altre terme de cerca", "empty_filtered": "Cap contacte coincideix amb els filtres", diff --git a/locales/cs/common.json b/locales/cs/common.json index d6fd3f664..d8017c236 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Žádné kontakty", "empty_state_title": "Žádné kontakty", "empty_state_subtitle": "Vytvořte první kontakt nebo importujte ze souboru vCard", + "empty_view_title": "Nejsou zde žádné kontakty", + "empty_view_hint": "Přidejte kontakt nebo importujte soubor vCard.", "empty_search": "Hledání neodpovídají žádné kontakty", "empty_search_hint": "Zkuste použít jiný hledaný výraz", "empty_filtered": "Žádné kontakty neodpovídají filtrům", diff --git a/locales/da/common.json b/locales/da/common.json index 010f3784d..298db2b42 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Ingen kontakter endnu", "empty_state_title": "Ingen kontakter endnu", "empty_state_subtitle": "Opret din første kontakt eller importér fra en vCard-fil", + "empty_view_title": "Ingen kontakter her", + "empty_view_hint": "Tilføj en kontakt, eller importér en vCard-fil.", "empty_search": "Ingen kontakter matcher din søgning", "empty_search_hint": "Prøv en anden søgeterm", "empty_filtered": "Ingen kontakter matcher dine filtre", diff --git a/locales/de/common.json b/locales/de/common.json index 2baeb9e64..3387a576c 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Keine Kontakte", "empty_state_title": "Keine Kontakte", "empty_state_subtitle": "Erstellen Sie Ihren ersten Kontakt oder importieren Sie aus einer vCard-Datei", + "empty_view_title": "Hier sind keine Kontakte", + "empty_view_hint": "Fügen Sie einen Kontakt hinzu oder importieren Sie eine vCard-Datei.", "empty_search": "Keine Kontakte gefunden", "empty_search_hint": "Versuchen Sie einen anderen Suchbegriff", "empty_filtered": "Keine Kontakte entsprechen Ihren Filtern", diff --git a/locales/en/common.json b/locales/en/common.json index 5687f31a1..fdbf20616 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -2949,6 +2949,8 @@ "empty_state": "No contacts yet", "empty_state_title": "No contacts yet", "empty_state_subtitle": "Create your first contact or import from a vCard file", + "empty_view_title": "No contacts here", + "empty_view_hint": "Add a contact or import a vCard file.", "empty_search": "No contacts match your search", "empty_search_hint": "Try a different search term", "empty_filtered": "No contacts match your filters", diff --git a/locales/es/common.json b/locales/es/common.json index 220d2c972..daa5b9b54 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -2949,6 +2949,8 @@ "empty_state": "No hay contactos", "empty_state_title": "Sin contactos", "empty_state_subtitle": "Crea tu primer contacto o importa desde un archivo vCard", + "empty_view_title": "No hay contactos aquí", + "empty_view_hint": "Añade un contacto o importa un archivo vCard.", "empty_search": "Ningún contacto coincide con tu búsqueda", "empty_search_hint": "Prueba con otro término de búsqueda", "empty_filtered": "Ningún contacto coincide con tus filtros", diff --git a/locales/et/common.json b/locales/et/common.json index 7fc11af4b..9c8e3759b 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Kontakte veel pole", "empty_state_title": "Kontakte veel pole", "empty_state_subtitle": "Loo oma esimene kontakt või impordi vCard-failist", + "empty_view_title": "Siin pole kontakte", + "empty_view_hint": "Lisage kontakt või importige vCard-fail.", "empty_search": "Otsingule ei vastanud ükski kontakt", "empty_search_hint": "Proovi teistsugust otsisõna", "empty_filtered": "Filtritele ei vastanud ükski kontakt", diff --git a/locales/fa/common.json b/locales/fa/common.json index 6ffd56332..0abc82120 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -2949,6 +2949,8 @@ "empty_state": "هنوز مخاطبی نیست", "empty_state_title": "هنوز مخاطبی نیست", "empty_state_subtitle": "اولین مخاطب خود را ایجاد کنید یا از فایل vCard وارد کنید", + "empty_view_title": "مخاطبی اینجا نیست", + "empty_view_hint": "مخاطبی اضافه کنید یا فایل vCard را وارد کنید.", "empty_search": "مخاطبی با این جستجو مطابقت ندارد", "empty_search_hint": "عبارت جستجوی دیگری را امتحان کنید", "empty_filtered": "مخاطبی با این فیلترها مطابقت ندارد", diff --git a/locales/fr/common.json b/locales/fr/common.json index 12f605a59..4c435d5d6 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Aucun contact", "empty_state_title": "Aucun contact", "empty_state_subtitle": "Créez votre premier contact ou importez depuis un fichier vCard", + "empty_view_title": "Aucun contact ici", + "empty_view_hint": "Ajoutez un contact ou importez un fichier vCard.", "empty_search": "Aucun contact ne correspond à votre recherche", "empty_search_hint": "Essayez un autre terme de recherche", "empty_filtered": "Aucun contact ne correspond à vos filtres", diff --git a/locales/he/common.json b/locales/he/common.json index e226a2e99..c50719691 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -2867,6 +2867,8 @@ "empty_state": "עדיין אין אנשי קשר", "empty_state_title": "עדיין אין אנשי קשר", "empty_state_subtitle": "צור את איש הקשר הראשון שלך או ייבא מקובץ vCard", + "empty_view_title": "אין כאן אנשי קשר", + "empty_view_hint": "הוסף איש קשר או ייבא קובץ vCard.", "empty_search": "אין אנשי קשר שתואמים לחיפוש שלך", "empty_search_hint": "נסה מונח חיפוש אחר", "clear_search": "נקה חיפוש", diff --git a/locales/hu/common.json b/locales/hu/common.json index 73e7169f4..012f002fb 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Még nincsenek névjegyek", "empty_state_title": "Még nincsenek névjegyek", "empty_state_subtitle": "Hozd létre az első névjegyed vagy importálj vCard fájlból", + "empty_view_title": "Itt nincsenek névjegyek", + "empty_view_hint": "Adjon hozzá egy névjegyet, vagy importáljon egy vCard-fájlt.", "empty_search": "Nincs a keresésnek megfelelő névjegy", "empty_search_hint": "Próbálj meg más keresési kifejezést", "empty_filtered": "Nincs a szűrőknek megfelelő névjegy", diff --git a/locales/it/common.json b/locales/it/common.json index ae13925e8..fb2c89711 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Nessun contatto", "empty_state_title": "Nessun contatto", "empty_state_subtitle": "Crea il tuo primo contatto o importa da un file vCard", + "empty_view_title": "Nessun contatto qui", + "empty_view_hint": "Aggiungi un contatto o importa un file vCard.", "empty_search": "Nessun contatto corrisponde alla ricerca", "empty_search_hint": "Prova con un altro termine di ricerca", "empty_filtered": "Nessun contatto corrisponde ai filtri", diff --git a/locales/ja/common.json b/locales/ja/common.json index 2fec05b54..48def560d 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -2949,6 +2949,8 @@ "empty_state": "連絡先がありません", "empty_state_title": "連絡先がありません", "empty_state_subtitle": "最初の連絡先を作成するか、vCardファイルからインポートしてください", + "empty_view_title": "ここに連絡先はありません", + "empty_view_hint": "連絡先を追加するか、vCard ファイルを読み込んでください。", "empty_search": "検索に一致する連絡先がありません", "empty_search_hint": "別の検索語をお試しください", "empty_filtered": "フィルターに一致する連絡先がありません", diff --git a/locales/ko/common.json b/locales/ko/common.json index 89a40e233..32af0e79b 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -2949,6 +2949,8 @@ "empty_state": "아직 연락처가 없어요", "empty_state_title": "아직 연락처가 없어요", "empty_state_subtitle": "새 연락처를 만들거나 vCard 파일에서 가져와 보세요", + "empty_view_title": "여기에 연락처가 없습니다", + "empty_view_hint": "연락처를 추가하거나 vCard 파일을 가져오세요.", "empty_search": "검색된 연락처가 없어요", "empty_search_hint": "다른 검색어로 다시 시도해 보세요", "empty_filtered": "필터에 일치하는 연락처가 없어요", diff --git a/locales/lv/common.json b/locales/lv/common.json index 365079994..f48c2aa53 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -2941,6 +2941,8 @@ "empty_state": "Kontaktu vēl nav", "empty_state_title": "Kontaktu vēl nav", "empty_state_subtitle": "Izveidojiet pirmo kontaktu vai importējiet no vCard faila", + "empty_view_title": "Šeit nav kontaktpersonu", + "empty_view_hint": "Pievienojiet kontaktpersonu vai importējiet vCard failu.", "empty_search": "Nav kontaktu, kas atbilstu vaicājumam", "empty_search_hint": "Mēģiniet citu meklēšanas vaicājumu", "empty_filtered": "Nav kontaktu, kas atbilstu filtriem", diff --git a/locales/mn/common.json b/locales/mn/common.json index 462979135..6df4e0485 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Харилцагч байхгүй", "empty_state_title": "Хараахан холбоо барих хүн алга", "empty_state_subtitle": "Анхны харилцагчаа үүсгэх эсвэл vCard файлаас импортлох", + "empty_view_title": "Энд харилцагч алга", + "empty_view_hint": "Харилцагч нэмэх эсвэл vCard файл импортлоно уу.", "empty_search": "Таны хайлтад тохирох харилцагч алга", "empty_search_hint": "Өөр хайлтын үг хэрэглэж үзнэ үү", "empty_filtered": "Таны шүүлтүүрт тохирох харилцагч алга", diff --git a/locales/nb/common.json b/locales/nb/common.json index 24bc9ac8b..a79a11f74 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Ingen kontakter ennå", "empty_state_title": "Ingen kontakter ennå", "empty_state_subtitle": "Opprett din første kontakt eller importer fra en vCard-fil", + "empty_view_title": "Ingen kontakter her", + "empty_view_hint": "Legg til en kontakt eller importer en vCard-fil.", "empty_search": "Ingen kontakter passer med søket ditt", "empty_search_hint": "Prøv et annet søkeord", "empty_filtered": "Ingen kontakter passer med filtrene dine", diff --git a/locales/nl/common.json b/locales/nl/common.json index f00af79c2..e211033a4 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Geen contacten", "empty_state_title": "Geen contacten", "empty_state_subtitle": "Maak uw eerste contact aan of importeer vanuit een vCard-bestand", + "empty_view_title": "Geen contacten hier", + "empty_view_hint": "Voeg een contact toe of importeer een vCard-bestand.", "empty_search": "Geen contacten gevonden", "empty_search_hint": "Probeer een andere zoekterm", "empty_filtered": "Geen contacten voldoen aan uw filters", diff --git a/locales/pl/common.json b/locales/pl/common.json index dc556a3ef..8c43bb663 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Brak kontaktów", "empty_state_title": "Brak kontaktów", "empty_state_subtitle": "Utwórz pierwszy kontakt lub zaimportuj z pliku vCard", + "empty_view_title": "Brak kontaktów", + "empty_view_hint": "Dodaj kontakt lub zaimportuj plik vCard.", "empty_search": "Żadne kontakty nie pasują do wyszukiwania", "empty_search_hint": "Spróbuj użyć innego wyszukiwanego hasła", "empty_filtered": "Żadne kontakty nie pasują do filtrów", diff --git a/locales/pt/common.json b/locales/pt/common.json index 22ce483bd..79a8fe8f3 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Nenhum contato", "empty_state_title": "Sem contatos", "empty_state_subtitle": "Crie seu primeiro contato ou importe de um arquivo vCard", + "empty_view_title": "Nenhum contato aqui", + "empty_view_hint": "Adicione um contato ou importe um arquivo vCard.", "empty_search": "Nenhum contato encontrado", "empty_search_hint": "Tente outro termo de pesquisa", "empty_filtered": "Nenhum contato corresponde aos seus filtros", diff --git a/locales/ro/common.json b/locales/ro/common.json index c9edfe869..de7c8383a 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Nu există încă contacte", "empty_state_title": "Nu există încă contacte", "empty_state_subtitle": "Creați primul dvs. contact sau importați-l dintr-un fișier „vCard”", + "empty_view_title": "Nu există contacte aici", + "empty_view_hint": "Adăugați un contact sau importați un fișier vCard.", "empty_search": "Nu există contacte care să corespundă căutării dvs.", "empty_search_hint": "Încercați un alt termen de căutare", "empty_filtered": "Nu există contacte care să corespundă filtrelor dvs.", diff --git a/locales/ru/common.json b/locales/ru/common.json index 5851bbf40..b56b17fb0 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Контактов пока нет", "empty_state_title": "Контактов пока нет", "empty_state_subtitle": "Создайте первый контакт или импортируйте из файла vCard", + "empty_view_title": "Здесь нет контактов", + "empty_view_hint": "Добавьте контакт или импортируйте файл vCard.", "empty_search": "Нет контактов, соответствующих вашему запросу", "empty_search_hint": "Попробуйте другой поисковый запрос", "empty_filtered": "Нет контактов, соответствующих фильтрам", diff --git a/locales/sk/common.json b/locales/sk/common.json index bd5340f54..566cb450c 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Žiadne kontakty", "empty_state_title": "Žiadne kontakty", "empty_state_subtitle": "Vytvorte prvý kontakt alebo importujte zo súboru vCard", + "empty_view_title": "Nie sú tu žiadne kontakty", + "empty_view_hint": "Pridajte kontakt alebo importujte súbor vCard.", "empty_search": "Hľadaniu nezodpovedajú žiadne kontakty", "empty_search_hint": "Skúste iný hľadaný výraz", "empty_filtered": "Žiadne kontakty nezodpovedajú filtrom", diff --git a/locales/th/common.json b/locales/th/common.json index 309aadc6c..716cc5774 100644 --- a/locales/th/common.json +++ b/locales/th/common.json @@ -2318,6 +2318,8 @@ "empty_state": "ยังไม่มีผู้ติดต่อ", "empty_state_title": "ยังไม่มีผู้ติดต่อ", "empty_state_subtitle": "สร้างผู้ติดต่อแรกของคุณ หรือนำเข้าจากไฟล์ vCard", + "empty_view_title": "ไม่มีผู้ติดต่อที่นี่", + "empty_view_hint": "เพิ่มผู้ติดต่อหรือนำเข้าไฟล์ vCard", "empty_search": "ไม่พบผู้ติดต่อที่ตรงกับการค้นหา", "empty_search_hint": "ลองค้นหาด้วยคำอื่น", "empty_filtered": "ไม่พบผู้ติดต่อที่ตรงกับตัวกรอง", diff --git a/locales/tr/common.json b/locales/tr/common.json index 3bb75feb6..07821845c 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Henüz kişi yok", "empty_state_title": "Henüz kişi yok", "empty_state_subtitle": "İlk kişinizi oluşturun veya vCard dosyasından içe aktarın", + "empty_view_title": "Burada kişi yok", + "empty_view_hint": "Bir kişi ekleyin veya bir vCard dosyası içe aktarın.", "empty_search": "Aramanızla eşleşen kişi yok", "empty_search_hint": "Farklı bir arama terimi deneyin", "empty_filtered": "Filtrelerinizle eşleşen kişi yok", diff --git a/locales/uk/common.json b/locales/uk/common.json index 2fb31dab6..3eab393ed 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -2949,6 +2949,8 @@ "empty_state": "Контактів ще немає", "empty_state_title": "Контактів ще немає", "empty_state_subtitle": "Створіть свій перший контакт або імпортуйте його з файлу vCard", + "empty_view_title": "Тут немає контактів", + "empty_view_hint": "Додайте контакт або імпортуйте файл vCard.", "empty_search": "Жоден контакт не відповідає вашому пошуку", "empty_search_hint": "Спробуйте інший термін пошуку", "empty_filtered": "Жоден контакт не відповідає фільтрам", diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index 0f1617bad..f63b56a5f 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -2949,6 +2949,8 @@ "empty_state": "尚無聯絡人", "empty_state_title": "尚無聯絡人", "empty_state_subtitle": "建立第一位聯絡人,或從 vCard 檔案匯入", + "empty_view_title": "這裡沒有聯絡人", + "empty_view_hint": "新增聯絡人或匯入 vCard 檔案。", "empty_search": "沒有符合您搜尋條件的聯絡人", "empty_search_hint": "嘗試其他搜尋字詞", "empty_filtered": "沒有符合您篩選條件的聯絡人", diff --git a/locales/zh/common.json b/locales/zh/common.json index 9492a4cd8..fc4597b00 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -2949,6 +2949,8 @@ "empty_state": "还没有联系人", "empty_state_title": "还没有联系人", "empty_state_subtitle": "创建您的第一个联系人或从 vCard 文件导入", + "empty_view_title": "此处没有联系人", + "empty_view_hint": "添加联系人或导入 vCard 文件。", "empty_search": "没有符合您搜索条件的联系人", "empty_search_hint": "尝试不同的搜索词", "empty_filtered": "没有符合您筛选条件的联系人",