diff --git a/_locales/de/messages.json b/_locales/de/messages.json index c2ce82c..a190aed 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -172,5 +172,131 @@ }, "next": { "message": "Nächste" + }, + "duplicate": { + "message": "Duplizieren" + }, + "merge": { + "message": "Zusammenführen" + }, + "move": { + "message": "Verschieben" + }, + "copy": { + "message": "Kopieren" + }, + "merge_lists_min_two": { + "message": "Wählen Sie mindestens zwei Listen zum Zusammenführen aus." + }, + "merge_lists_confirm": { + "message": "{count} Liste(n) in \"{target}\" zusammenführen? Quelllisten werden entfernt." + }, + "delete_current_list": { + "message": "Aktuelle Liste löschen?" + }, + "delete_lists_confirm": { + "message": "{count} ausgewählte Liste(n) löschen?" + }, + "invalid_import_format": { + "message": "Ungültiges Dateiformat. Bitte wählen Sie eine gültige Goose Highlighter-Exportdatei." + }, + "import_failed": { + "message": "Import der Datei fehlgeschlagen. Bitte stellen Sie sicher, dass es sich um eine gültige JSON-Datei handelt." + }, + "import_confirm": { + "message": "{count} Liste(n) mit insgesamt {words} Wort/Wörtern importieren?" + }, + "import_success": { + "message": "{count} Liste(n) mit {words} Wort/Wörtern erfolgreich importiert." + }, + "preview_label": { + "message": "Vorschau" + }, + "preview_text": { + "message": "So wird Ihr hervorgehobener Text angezeigt." + }, + "preview_text_before": { + "message": "So wird Ihr" + }, + "preview_text_highlight": { + "message": "hervorgehobener Text" + }, + "preview_text_after": { + "message": "angezeigt." + }, + "enable_highlighting_title": { + "message": "Hervorhebung aktivieren" + }, + "enable_highlighting_subtitle": { + "message": "Hervorhebungen auf Seiten anzeigen" + }, + "manage_lists": { + "message": "Listen verwalten" + }, + "background_label": { + "message": "Hintergrund" + }, + "foreground_label": { + "message": "Vordergrund" + }, + "multi_select_hint": { + "message": "Klicken zum Auswählen • Strg/Cmd+Klick für Mehrfachauswahl" + }, + "dark_mode_title": { + "message": "Dunkelmodus" + }, + "dark_mode_subtitle": { + "message": "Zwischen hellem und dunklem Design wechseln" + }, + "list_manager_title": { + "message": "Listenverwaltung" + }, + "words_label": { + "message": "Wörter" + }, + "active_label": { + "message": "aktiv" + }, + "inactive_label": { + "message": "inaktiv" + }, + "drag_words_hint": { + "message": "Klicken zum Auswählen • Strg/Cmd+Klick für Mehrfachauswahl • Wörter zu Listen ziehen zum Kopieren" + }, + "drag_lists_hint": { + "message": "Listen ziehen zum Neuordnen • Strg+Klick für Mehrfachauswahl" + }, + "showing_items": { + "message": "Zeige {start}-{end} von {total} Wörtern" + }, + "items_per_page": { + "message": "Elemente pro Seite:" + }, + "page_info": { + "message": "Seite {current} von {total}" + }, + "toggle_active": { + "message": "Aktiv umschalten" + }, + "rename_list_title": { + "message": "Liste umbenennen" + }, + "new_list_title": { + "message": "Neue Liste" + }, + "delete_list_title": { + "message": "Liste löschen" + }, + "list_active_badge": { + "message": "Aktiv" + }, + "list_paused_badge": { + "message": "Pausiert" + }, + "words_stats": { + "message": "{total} Wörter • {active} aktiv • {inactive} inaktiv" + }, + "rename_list": { + "message": "Liste umbenennen" } } \ No newline at end of file diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 0d6c0c8..fd0ea0f 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -178,5 +178,161 @@ }, "next": { "message": "Next" + }, + "duplicate": { + "message": "Duplicate" + }, + "merge": { + "message": "Merge" + }, + "move": { + "message": "Move" + }, + "copy": { + "message": "Copy" + }, + "merge_lists_min_two": { + "message": "Select at least two lists to merge." + }, + "merge_lists_confirm": { + "message": "Merge {count} list(s) into \"{target}\"? Source lists will be removed." + }, + "delete_current_list": { + "message": "Delete current list?" + }, + "delete_lists_confirm": { + "message": "Delete {count} selected list(s)?" + }, + "invalid_import_format": { + "message": "Invalid file format. Please select a valid Goose Highlighter export file." + }, + "import_failed": { + "message": "Failed to import file. Please ensure it is a valid JSON file." + }, + "import_confirm": { + "message": "Import {count} list(s) with {words} total word(s)?" + }, + "import_success": { + "message": "Successfully imported {count} list(s) with {words} word(s)." + }, + "preview_label": { + "message": "Preview" + }, + "preview_text": { + "message": "This is how your highlighted text will appear." + }, + "preview_text_before": { + "message": "This is how your" + }, + "preview_text_highlight": { + "message": "highlighted text" + }, + "preview_text_after": { + "message": "will appear." + }, + "enable_highlighting_title": { + "message": "Enable Highlighting" + }, + "enable_highlighting_subtitle": { + "message": "Show highlights on pages" + }, + "manage_lists": { + "message": "Manage Lists" + }, + "background_label": { + "message": "Background" + }, + "foreground_label": { + "message": "Foreground" + }, + "multi_select_hint": { + "message": "Click to select • Ctrl/Cmd+Click for multi-select" + }, + "dark_mode_title": { + "message": "Dark Mode" + }, + "dark_mode_subtitle": { + "message": "Toggle dark/light theme" + }, + "list_manager_title": { + "message": "List Manager" + }, + "words_label": { + "message": "words" + }, + "active_label": { + "message": "active" + }, + "inactive_label": { + "message": "inactive" + }, + "drag_words_hint": { + "message": "Click to select • Ctrl/Cmd+Click for multi-select • Drag words to lists to copy" + }, + "drag_lists_hint": { + "message": "Drag lists to reorder • Ctrl+Click for multi-select" + }, + "showing_items": { + "message": "Showing {start}-{end} of {total} words" + }, + "items_per_page": { + "message": "Items per page:" + }, + "page_info": { + "message": "Page {current} of {total}" + }, + "toggle_active": { + "message": "toggle active" + }, + "rename_list_title": { + "message": "Rename list" + }, + "new_list_title": { + "message": "New list" + }, + "delete_list_title": { + "message": "Delete list" + }, + "list_active_badge": { + "message": "Active" + }, + "list_paused_badge": { + "message": "Paused" + }, + "words_stats": { + "message": "{total} words • {active} active • {inactive} inactive" + }, + "rename_list": { + "message": "Rename List" + }, + "no_words_in_list": { + "message": "No words in this list." + }, + "edit_word": { + "message": "Edit word" + }, + "first_page": { + "message": "First page" + }, + "previous_page": { + "message": "Previous page" + }, + "next_page": { + "message": "Next page" + }, + "last_page": { + "message": "Last page" + }, + "enter_list_name": { + "message": "Enter list name:" + }, + "cannot_delete_last_list": { + "message": "Cannot delete the last list" + }, + "edit_list_name_and_colors_title": { + "message": "Edit list name and colors" + }, + "close": { + "message": "Close" } } \ No newline at end of file diff --git a/_locales/es/messages.json b/_locales/es/messages.json index f473ca7..967f591 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "Siguiente" + }, + "duplicate": { + "message": "Duplicar" + }, + "merge": { + "message": "Combinar" + }, + "move": { + "message": "Mover" + }, + "copy": { + "message": "Copiar" + }, + "merge_lists_min_two": { + "message": "Seleccione al menos dos listas para combinar." + }, + "merge_lists_confirm": { + "message": "¿Combinar {count} lista(s) en \"{target}\"? Las listas de origen se eliminarán." + }, + "delete_current_list": { + "message": "¿Eliminar la lista actual?" + }, + "delete_lists_confirm": { + "message": "¿Eliminar {count} lista(s) seleccionada(s)?" + }, + "invalid_import_format": { + "message": "Formato de archivo no válido. Seleccione un archivo de exportación válido de Goose Highlighter." + }, + "import_failed": { + "message": "Error al importar el archivo. Asegúrese de que sea un archivo JSON válido." + }, + "import_confirm": { + "message": "¿Importar {count} lista(s) con {words} palabra(s) en total?" + }, + "import_success": { + "message": "Se importaron correctamente {count} lista(s) con {words} palabra(s)." + }, + "preview_label": { + "message": "Vista previa" + }, + "preview_text": { + "message": "Así es como aparecerá su texto resaltado." + }, + "preview_text_before": { + "message": "Así es como aparecerá su" + }, + "preview_text_highlight": { + "message": "texto resaltado" + }, + "preview_text_after": { + "message": "." + }, + "enable_highlighting_title": { + "message": "Activar resaltado" + }, + "enable_highlighting_subtitle": { + "message": "Mostrar resaltados en páginas" + }, + "manage_lists": { + "message": "Gestionar listas" + }, + "background_label": { + "message": "Fondo" + }, + "foreground_label": { + "message": "Texto" + }, + "multi_select_hint": { + "message": "Clic para seleccionar • Ctrl/Cmd+Clic para selección múltiple" + }, + "dark_mode_title": { + "message": "Modo oscuro" + }, + "dark_mode_subtitle": { + "message": "Alternar tema claro/oscuro" + }, + "list_manager_title": { + "message": "Gestor de listas" + }, + "words_label": { + "message": "palabras" + }, + "active_label": { + "message": "activo" + }, + "inactive_label": { + "message": "inactivo" + }, + "drag_words_hint": { + "message": "Clic para seleccionar • Ctrl/Cmd+Clic para selección múltiple • Arrastrar palabras a listas para copiar" + }, + "drag_lists_hint": { + "message": "Arrastrar listas para reordenar • Ctrl+Clic para selección múltiple" + }, + "showing_items": { + "message": "Mostrando {start}-{end} de {total} palabras" + }, + "items_per_page": { + "message": "Elementos por página:" + }, + "page_info": { + "message": "Página {current} de {total}" + }, + "toggle_active": { + "message": "alternar activo" + }, + "rename_list_title": { + "message": "Renombrar lista" + }, + "new_list_title": { + "message": "Nueva lista" + }, + "delete_list_title": { + "message": "Eliminar lista" + }, + "list_active_badge": { + "message": "Activo" + }, + "list_paused_badge": { + "message": "Pausado" + }, + "words_stats": { + "message": "{total} palabras • {active} activas • {inactive} inactivas" + }, + "rename_list": { + "message": "Renombrar lista" } } \ No newline at end of file diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index 1fac6e8..44712d2 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "Suivant" + }, + "duplicate": { + "message": "Dupliquer" + }, + "merge": { + "message": "Fusionner" + }, + "move": { + "message": "Déplacer" + }, + "copy": { + "message": "Copier" + }, + "merge_lists_min_two": { + "message": "Sélectionnez au moins deux listes à fusionner." + }, + "merge_lists_confirm": { + "message": "Fusionner {count} liste(s) dans \"{target}\" ? Les listes sources seront supprimées." + }, + "delete_current_list": { + "message": "Supprimer la liste actuelle ?" + }, + "delete_lists_confirm": { + "message": "Supprimer {count} liste(s) sélectionnée(s) ?" + }, + "invalid_import_format": { + "message": "Format de fichier invalide. Veuillez sélectionner un fichier d'exportation Goose Highlighter valide." + }, + "import_failed": { + "message": "Échec de l'importation du fichier. Veuillez vous assurer qu'il s'agit d'un fichier JSON valide." + }, + "import_confirm": { + "message": "Importer {count} liste(s) avec {words} mot(s) au total ?" + }, + "import_success": { + "message": "{count} liste(s) avec {words} mot(s) importée(s) avec succès." + }, + "preview_label": { + "message": "Aperçu" + }, + "preview_text": { + "message": "Voici comment votre texte surligné apparaîtra." + }, + "preview_text_before": { + "message": "Voici comment votre" + }, + "preview_text_highlight": { + "message": "texte surligné" + }, + "preview_text_after": { + "message": "apparaîtra." + }, + "enable_highlighting_title": { + "message": "Activer la surbrillance" + }, + "enable_highlighting_subtitle": { + "message": "Afficher les surlignages sur les pages" + }, + "manage_lists": { + "message": "Gérer les listes" + }, + "background_label": { + "message": "Arrière-plan" + }, + "foreground_label": { + "message": "Texte" + }, + "multi_select_hint": { + "message": "Cliquer pour sélectionner • Ctrl/Cmd+Clic pour sélection multiple" + }, + "dark_mode_title": { + "message": "Mode sombre" + }, + "dark_mode_subtitle": { + "message": "Basculer entre thème clair/sombre" + }, + "list_manager_title": { + "message": "Gestionnaire de listes" + }, + "words_label": { + "message": "mots" + }, + "active_label": { + "message": "actif" + }, + "inactive_label": { + "message": "inactif" + }, + "drag_words_hint": { + "message": "Cliquer pour sélectionner • Ctrl/Cmd+Clic pour sélection multiple • Glisser les mots vers les listes pour copier" + }, + "drag_lists_hint": { + "message": "Glisser les listes pour réorganiser • Ctrl+Clic pour sélection multiple" + }, + "showing_items": { + "message": "Affichage de {start}-{end} sur {total} mots" + }, + "items_per_page": { + "message": "Éléments par page :" + }, + "page_info": { + "message": "Page {current} sur {total}" + }, + "toggle_active": { + "message": "basculer actif" + }, + "rename_list_title": { + "message": "Renommer la liste" + }, + "new_list_title": { + "message": "Nouvelle liste" + }, + "delete_list_title": { + "message": "Supprimer la liste" + }, + "list_active_badge": { + "message": "Actif" + }, + "list_paused_badge": { + "message": "En pause" + }, + "words_stats": { + "message": "{total} mots • {active} actifs • {inactive} inactifs" + }, + "rename_list": { + "message": "Renommer la liste" } } \ No newline at end of file diff --git a/_locales/hi/messages.json b/_locales/hi/messages.json index b0337b5..c91b039 100644 --- a/_locales/hi/messages.json +++ b/_locales/hi/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "अगला" + }, + "duplicate": { + "message": "डुप्लिकेट" + }, + "merge": { + "message": "मर्ज करें" + }, + "move": { + "message": "स्थानांतरित करें" + }, + "copy": { + "message": "कॉपी करें" + }, + "merge_lists_min_two": { + "message": "मर्ज करने के लिए कम से कम दो सूचियाँ चुनें।" + }, + "merge_lists_confirm": { + "message": "{count} सूची(याँ) को \"{target}\" में मर्ज करें? स्रोत सूचियाँ हटा दी जाएंगी।" + }, + "delete_current_list": { + "message": "वर्तमान सूची हटाएं?" + }, + "delete_lists_confirm": { + "message": "{count} चयनित सूची(याँ) हटाएं?" + }, + "invalid_import_format": { + "message": "अमान्य फ़ाइल प्रारूप। कृपया एक मान्य Goose Highlighter निर्यात फ़ाइल चुनें।" + }, + "import_failed": { + "message": "फ़ाइल आयात करने में विफल। कृपया सुनिश्चित करें कि यह एक मान्य JSON फ़ाइल है।" + }, + "import_confirm": { + "message": "कुल {words} शब्द(ों) के साथ {count} सूची(याँ) आयात करें?" + }, + "import_success": { + "message": "{words} शब्द(ों) के साथ {count} सूची(याँ) सफलतापूर्वक आयात की गईं।" + }, + "preview_label": { + "message": "पूर्वावलोकन" + }, + "preview_text": { + "message": "आपका हाइलाइट किया गया टेक्स्ट इस तरह दिखाई देगा।" + }, + "preview_text_before": { + "message": "आपका" + }, + "preview_text_highlight": { + "message": "हाइलाइट किया गया टेक्स्ट" + }, + "preview_text_after": { + "message": "इस तरह दिखाई देगा।" + }, + "enable_highlighting_title": { + "message": "हाइलाइटिंग सक्षम करें" + }, + "enable_highlighting_subtitle": { + "message": "पृष्ठों पर हाइलाइट दिखाएं" + }, + "manage_lists": { + "message": "सूचियाँ प्रबंधित करें" + }, + "background_label": { + "message": "पृष्ठभूमि" + }, + "foreground_label": { + "message": "अग्रभूमि" + }, + "multi_select_hint": { + "message": "चुनने के लिए क्लिक करें • एकाधिक चयन के लिए Ctrl/Cmd+क्लिक" + }, + "dark_mode_title": { + "message": "डार्क मोड" + }, + "dark_mode_subtitle": { + "message": "हल्की/गहरी थीम टॉगल करें" + }, + "list_manager_title": { + "message": "सूची प्रबंधक" + }, + "words_label": { + "message": "शब्द" + }, + "active_label": { + "message": "सक्रिय" + }, + "inactive_label": { + "message": "निष्क्रिय" + }, + "drag_words_hint": { + "message": "चुनने के लिए क्लिक करें • एकाधिक चयन के लिए Ctrl/Cmd+क्लिक • कॉपी करने के लिए शब्दों को सूचियों में खींचें" + }, + "drag_lists_hint": { + "message": "पुनः क्रमित करने के लिए सूचियों को खींचें • एकाधिक चयन के लिए Ctrl+क्लिक" + }, + "showing_items": { + "message": "{total} शब्दों में से {start}-{end} दिखा रहे हैं" + }, + "items_per_page": { + "message": "प्रति पृष्ठ आइटम:" + }, + "page_info": { + "message": "पृष्ठ {current} का {total}" + }, + "toggle_active": { + "message": "सक्रिय टॉगल करें" + }, + "rename_list_title": { + "message": "सूची का नाम बदलें" + }, + "new_list_title": { + "message": "नई सूची" + }, + "delete_list_title": { + "message": "सूची हटाएं" + }, + "list_active_badge": { + "message": "सक्रिय" + }, + "list_paused_badge": { + "message": "रोका गया" + }, + "words_stats": { + "message": "{total} शब्द • {active} सक्रिय • {inactive} निष्क्रिय" + }, + "rename_list": { + "message": "सूची का नाम बदलें" } } \ No newline at end of file diff --git a/_locales/it/messages.json b/_locales/it/messages.json index a9fd1cd..ca0cc09 100644 --- a/_locales/it/messages.json +++ b/_locales/it/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "Successivo" + }, + "duplicate": { + "message": "Duplica" + }, + "merge": { + "message": "Unisci" + }, + "move": { + "message": "Sposta" + }, + "copy": { + "message": "Copia" + }, + "merge_lists_min_two": { + "message": "Seleziona almeno due elenchi da unire." + }, + "merge_lists_confirm": { + "message": "Unire {count} elenco/i in \"{target}\"? Gli elenchi di origine verranno rimossi." + }, + "delete_current_list": { + "message": "Eliminare l'elenco corrente?" + }, + "delete_lists_confirm": { + "message": "Eliminare {count} elenco/i selezionato/i?" + }, + "invalid_import_format": { + "message": "Formato file non valido. Seleziona un file di esportazione Goose Highlighter valido." + }, + "import_failed": { + "message": "Importazione del file non riuscita. Assicurati che sia un file JSON valido." + }, + "import_confirm": { + "message": "Importare {count} elenco/i con {words} parola/e totali?" + }, + "import_success": { + "message": "Importati con successo {count} elenco/i con {words} parola/e." + }, + "preview_label": { + "message": "Anteprima" + }, + "preview_text": { + "message": "Ecco come apparirà il tuo testo evidenziato." + }, + "preview_text_before": { + "message": "Ecco come apparirà il tuo" + }, + "preview_text_highlight": { + "message": "testo evidenziato" + }, + "preview_text_after": { + "message": "." + }, + "enable_highlighting_title": { + "message": "Abilita evidenziazione" + }, + "enable_highlighting_subtitle": { + "message": "Mostra evidenziazioni sulle pagine" + }, + "manage_lists": { + "message": "Gestisci elenchi" + }, + "background_label": { + "message": "Sfondo" + }, + "foreground_label": { + "message": "Testo" + }, + "multi_select_hint": { + "message": "Clicca per selezionare • Ctrl/Cmd+Clic per selezione multipla" + }, + "dark_mode_title": { + "message": "Modalità scura" + }, + "dark_mode_subtitle": { + "message": "Passa tra tema chiaro/scuro" + }, + "list_manager_title": { + "message": "Gestore elenchi" + }, + "words_label": { + "message": "parole" + }, + "active_label": { + "message": "attivo" + }, + "inactive_label": { + "message": "inattivo" + }, + "drag_words_hint": { + "message": "Clicca per selezionare • Ctrl/Cmd+Clic per selezione multipla • Trascina parole negli elenchi per copiare" + }, + "drag_lists_hint": { + "message": "Trascina elenchi per riordinare • Ctrl+Clic per selezione multipla" + }, + "showing_items": { + "message": "Visualizzazione di {start}-{end} su {total} parole" + }, + "items_per_page": { + "message": "Elementi per pagina:" + }, + "page_info": { + "message": "Pagina {current} di {total}" + }, + "toggle_active": { + "message": "attiva/disattiva" + }, + "rename_list_title": { + "message": "Rinomina elenco" + }, + "new_list_title": { + "message": "Nuovo elenco" + }, + "delete_list_title": { + "message": "Elimina elenco" + }, + "list_active_badge": { + "message": "Attivo" + }, + "list_paused_badge": { + "message": "In pausa" + }, + "words_stats": { + "message": "{total} parole • {active} attive • {inactive} inattive" + }, + "rename_list": { + "message": "Rinomina elenco" } } \ No newline at end of file diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index 9fe838b..ef27a05 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "次へ" + }, + "duplicate": { + "message": "複製" + }, + "merge": { + "message": "統合" + }, + "move": { + "message": "移動" + }, + "copy": { + "message": "コピー" + }, + "merge_lists_min_two": { + "message": "統合するには少なくとも2つのリストを選択してください。" + }, + "merge_lists_confirm": { + "message": "{count}個のリストを\"{target}\"に統合しますか?ソースリストは削除されます。" + }, + "delete_current_list": { + "message": "現在のリストを削除しますか?" + }, + "delete_lists_confirm": { + "message": "選択した{count}個のリストを削除しますか?" + }, + "invalid_import_format": { + "message": "無効なファイル形式です。有効なGoose Highlighterエクスポートファイルを選択してください。" + }, + "import_failed": { + "message": "ファイルのインポートに失敗しました。有効なJSONファイルであることを確認してください。" + }, + "import_confirm": { + "message": "合計{words}個の単語を含む{count}個のリストをインポートしますか?" + }, + "import_success": { + "message": "{words}個の単語を含む{count}個のリストを正常にインポートしました。" + }, + "preview_label": { + "message": "プレビュー" + }, + "preview_text": { + "message": "ハイライトされたテキストはこのように表示されます。" + }, + "preview_text_before": { + "message": "" + }, + "preview_text_highlight": { + "message": "ハイライトされたテキスト" + }, + "preview_text_after": { + "message": "はこのように表示されます。" + }, + "enable_highlighting_title": { + "message": "ハイライトを有効にする" + }, + "enable_highlighting_subtitle": { + "message": "ページにハイライトを表示" + }, + "manage_lists": { + "message": "リストを管理" + }, + "background_label": { + "message": "背景" + }, + "foreground_label": { + "message": "前景" + }, + "multi_select_hint": { + "message": "クリックして選択 • Ctrl/Cmd+クリックで複数選択" + }, + "dark_mode_title": { + "message": "ダークモード" + }, + "dark_mode_subtitle": { + "message": "ライト/ダークテーマを切り替え" + }, + "list_manager_title": { + "message": "リストマネージャー" + }, + "words_label": { + "message": "単語" + }, + "active_label": { + "message": "有効" + }, + "inactive_label": { + "message": "無効" + }, + "drag_words_hint": { + "message": "クリックして選択 • Ctrl/Cmd+クリックで複数選択 • 単語をリストにドラッグしてコピー" + }, + "drag_lists_hint": { + "message": "リストをドラッグして並べ替え • Ctrl+クリックで複数選択" + }, + "showing_items": { + "message": "{total}単語中{start}-{end}を表示" + }, + "items_per_page": { + "message": "ページあたりのアイテム数:" + }, + "page_info": { + "message": "ページ{current}/{total}" + }, + "toggle_active": { + "message": "有効/無効を切り替え" + }, + "rename_list_title": { + "message": "リスト名を変更" + }, + "new_list_title": { + "message": "新しいリスト" + }, + "delete_list_title": { + "message": "リストを削除" + }, + "list_active_badge": { + "message": "有効" + }, + "list_paused_badge": { + "message": "一時停止" + }, + "words_stats": { + "message": "{total}単語 • {active}有効 • {inactive}無効" + }, + "rename_list": { + "message": "リスト名を変更" } } \ No newline at end of file diff --git a/_locales/ko/messages.json b/_locales/ko/messages.json index 38c058d..fc7baab 100644 --- a/_locales/ko/messages.json +++ b/_locales/ko/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "다음" + }, + "duplicate": { + "message": "복제" + }, + "merge": { + "message": "병합" + }, + "move": { + "message": "이동" + }, + "copy": { + "message": "복사" + }, + "merge_lists_min_two": { + "message": "병합하려면 최소 두 개의 리스트를 선택하세요." + }, + "merge_lists_confirm": { + "message": "{count}개의 리스트를 \"{target}\"에 병합하시겠습니까? 소스 리스트는 제거됩니다." + }, + "delete_current_list": { + "message": "현재 리스트를 삭제하시겠습니까?" + }, + "delete_lists_confirm": { + "message": "선택한 {count}개의 리스트를 삭제하시겠습니까?" + }, + "invalid_import_format": { + "message": "잘못된 파일 형식입니다. 유효한 Goose Highlighter 내보내기 파일을 선택하세요." + }, + "import_failed": { + "message": "파일 가져오기에 실패했습니다. 유효한 JSON 파일인지 확인하세요." + }, + "import_confirm": { + "message": "총 {words}개의 단어가 포함된 {count}개의 리스트를 가져오시겠습니까?" + }, + "import_success": { + "message": "{words}개의 단어가 포함된 {count}개의 리스트를 성공적으로 가져왔습니다." + }, + "preview_label": { + "message": "미리보기" + }, + "preview_text": { + "message": "하이라이트된 텍스트가 이렇게 표시됩니다." + }, + "preview_text_before": { + "message": "" + }, + "preview_text_highlight": { + "message": "하이라이트된 텍스트" + }, + "preview_text_after": { + "message": "가 이렇게 표시됩니다." + }, + "enable_highlighting_title": { + "message": "하이라이트 활성화" + }, + "enable_highlighting_subtitle": { + "message": "페이지에 하이라이트 표시" + }, + "manage_lists": { + "message": "리스트 관리" + }, + "background_label": { + "message": "배경" + }, + "foreground_label": { + "message": "전경" + }, + "multi_select_hint": { + "message": "클릭하여 선택 • Ctrl/Cmd+클릭으로 다중 선택" + }, + "dark_mode_title": { + "message": "다크 모드" + }, + "dark_mode_subtitle": { + "message": "밝은/어두운 테마 전환" + }, + "list_manager_title": { + "message": "리스트 관리자" + }, + "words_label": { + "message": "단어" + }, + "active_label": { + "message": "활성" + }, + "inactive_label": { + "message": "비활성" + }, + "drag_words_hint": { + "message": "클릭하여 선택 • Ctrl/Cmd+클릭으로 다중 선택 • 단어를 리스트로 드래그하여 복사" + }, + "drag_lists_hint": { + "message": "리스트를 드래그하여 재정렬 • Ctrl+클릭으로 다중 선택" + }, + "showing_items": { + "message": "{total}개 단어 중 {start}-{end} 표시" + }, + "items_per_page": { + "message": "페이지당 항목 수:" + }, + "page_info": { + "message": "페이지 {current}/{total}" + }, + "toggle_active": { + "message": "활성 전환" + }, + "rename_list_title": { + "message": "리스트 이름 변경" + }, + "new_list_title": { + "message": "새 리스트" + }, + "delete_list_title": { + "message": "리스트 삭제" + }, + "list_active_badge": { + "message": "활성" + }, + "list_paused_badge": { + "message": "일시정지" + }, + "words_stats": { + "message": "{total}개 단어 • {active}개 활성 • {inactive}개 비활성" + }, + "rename_list": { + "message": "리스트 이름 변경" } } \ No newline at end of file diff --git a/_locales/nl/messages.json b/_locales/nl/messages.json index 3f3768d..6e3d2bf 100644 --- a/_locales/nl/messages.json +++ b/_locales/nl/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "Volgende" + }, + "duplicate": { + "message": "Dupliceren" + }, + "merge": { + "message": "Samenvoegen" + }, + "move": { + "message": "Verplaatsen" + }, + "copy": { + "message": "Kopiëren" + }, + "merge_lists_min_two": { + "message": "Selecteer minimaal twee lijsten om samen te voegen." + }, + "merge_lists_confirm": { + "message": "{count} lijst(en) samenvoegen in \"{target}\"? Bronlijsten worden verwijderd." + }, + "delete_current_list": { + "message": "Huidige lijst verwijderen?" + }, + "delete_lists_confirm": { + "message": "{count} geselecteerde lijst(en) verwijderen?" + }, + "invalid_import_format": { + "message": "Ongeldig bestandsformaat. Selecteer een geldig Goose Highlighter exportbestand." + }, + "import_failed": { + "message": "Importeren van bestand mislukt. Zorg ervoor dat het een geldig JSON-bestand is." + }, + "import_confirm": { + "message": "{count} lijst(en) met in totaal {words} woord(en) importeren?" + }, + "import_success": { + "message": "{count} lijst(en) met {words} woord(en) succesvol geïmporteerd." + }, + "preview_label": { + "message": "Voorbeeld" + }, + "preview_text": { + "message": "Zo zal uw gemarkeerde tekst verschijnen." + }, + "preview_text_before": { + "message": "Zo zal uw" + }, + "preview_text_highlight": { + "message": "gemarkeerde tekst" + }, + "preview_text_after": { + "message": "verschijnen." + }, + "enable_highlighting_title": { + "message": "Markeren inschakelen" + }, + "enable_highlighting_subtitle": { + "message": "Markeringen op pagina's weergeven" + }, + "manage_lists": { + "message": "Lijsten beheren" + }, + "background_label": { + "message": "Achtergrond" + }, + "foreground_label": { + "message": "Voorgrond" + }, + "multi_select_hint": { + "message": "Klik om te selecteren • Ctrl/Cmd+Klik voor meervoudige selectie" + }, + "dark_mode_title": { + "message": "Donkere modus" + }, + "dark_mode_subtitle": { + "message": "Schakel tussen licht/donker thema" + }, + "list_manager_title": { + "message": "Lijstbeheerder" + }, + "words_label": { + "message": "woorden" + }, + "active_label": { + "message": "actief" + }, + "inactive_label": { + "message": "inactief" + }, + "drag_words_hint": { + "message": "Klik om te selecteren • Ctrl/Cmd+Klik voor meervoudige selectie • Sleep woorden naar lijsten om te kopiëren" + }, + "drag_lists_hint": { + "message": "Sleep lijsten om te herschikken • Ctrl+Klik voor meervoudige selectie" + }, + "showing_items": { + "message": "{start}-{end} van {total} woorden weergegeven" + }, + "items_per_page": { + "message": "Items per pagina:" + }, + "page_info": { + "message": "Pagina {current} van {total}" + }, + "toggle_active": { + "message": "actief schakelen" + }, + "rename_list_title": { + "message": "Lijst hernoemen" + }, + "new_list_title": { + "message": "Nieuwe lijst" + }, + "delete_list_title": { + "message": "Lijst verwijderen" + }, + "list_active_badge": { + "message": "Actief" + }, + "list_paused_badge": { + "message": "Gepauzeerd" + }, + "words_stats": { + "message": "{total} woorden • {active} actief • {inactive} inactief" + }, + "rename_list": { + "message": "Lijst hernoemen" } } \ No newline at end of file diff --git a/_locales/pl/messages.json b/_locales/pl/messages.json index 3b3da2f..6832e0d 100644 --- a/_locales/pl/messages.json +++ b/_locales/pl/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "Następny" + }, + "duplicate": { + "message": "Duplikuj" + }, + "merge": { + "message": "Scal" + }, + "move": { + "message": "Przenieś" + }, + "copy": { + "message": "Kopiuj" + }, + "merge_lists_min_two": { + "message": "Wybierz co najmniej dwie listy do scalenia." + }, + "merge_lists_confirm": { + "message": "Scalić {count} list(y) w \"{target}\"? Listy źródłowe zostaną usunięte." + }, + "delete_current_list": { + "message": "Usunąć bieżącą listę?" + }, + "delete_lists_confirm": { + "message": "Usunąć {count} wybraną/e listę/y?" + }, + "invalid_import_format": { + "message": "Nieprawidłowy format pliku. Wybierz prawidłowy plik eksportu Goose Highlighter." + }, + "import_failed": { + "message": "Nie udało się zaimportować pliku. Upewnij się, że jest to prawidłowy plik JSON." + }, + "import_confirm": { + "message": "Zaimportować {count} list(y) z łącznie {words} słowami?" + }, + "import_success": { + "message": "Pomyślnie zaimportowano {count} list(y) z {words} słowami." + }, + "preview_label": { + "message": "Podgląd" + }, + "preview_text": { + "message": "Tak będzie wyglądał Twój podświetlony tekst." + }, + "preview_text_before": { + "message": "Tak będzie wyglądał Twój" + }, + "preview_text_highlight": { + "message": "podświetlony tekst" + }, + "preview_text_after": { + "message": "." + }, + "enable_highlighting_title": { + "message": "Włącz podświetlanie" + }, + "enable_highlighting_subtitle": { + "message": "Pokaż podświetlenia na stronach" + }, + "manage_lists": { + "message": "Zarządzaj listami" + }, + "background_label": { + "message": "Tło" + }, + "foreground_label": { + "message": "Pierwszy plan" + }, + "multi_select_hint": { + "message": "Kliknij, aby zaznaczyć • Ctrl/Cmd+Klik dla wielokrotnego zaznaczenia" + }, + "dark_mode_title": { + "message": "Tryb ciemny" + }, + "dark_mode_subtitle": { + "message": "Przełącz między jasnym/ciemnym motywem" + }, + "list_manager_title": { + "message": "Menedżer list" + }, + "words_label": { + "message": "słowa" + }, + "active_label": { + "message": "aktywny" + }, + "inactive_label": { + "message": "nieaktywny" + }, + "drag_words_hint": { + "message": "Kliknij, aby zaznaczyć • Ctrl/Cmd+Klik dla wielokrotnego zaznaczenia • Przeciągnij słowa do list, aby skopiować" + }, + "drag_lists_hint": { + "message": "Przeciągnij listy, aby zmienić kolejność • Ctrl+Klik dla wielokrotnego zaznaczenia" + }, + "showing_items": { + "message": "Wyświetlanie {start}-{end} z {total} słów" + }, + "items_per_page": { + "message": "Elementów na stronę:" + }, + "page_info": { + "message": "Strona {current} z {total}" + }, + "toggle_active": { + "message": "przełącz aktywny" + }, + "rename_list_title": { + "message": "Zmień nazwę listy" + }, + "new_list_title": { + "message": "Nowa lista" + }, + "delete_list_title": { + "message": "Usuń listę" + }, + "list_active_badge": { + "message": "Aktywny" + }, + "list_paused_badge": { + "message": "Wstrzymany" + }, + "words_stats": { + "message": "{total} słów • {active} aktywnych • {inactive} nieaktywnych" + }, + "rename_list": { + "message": "Zmień nazwę listy" } } \ No newline at end of file diff --git a/_locales/pt_BR/messages.json b/_locales/pt_BR/messages.json index 9d1fbbb..e9579fa 100644 --- a/_locales/pt_BR/messages.json +++ b/_locales/pt_BR/messages.json @@ -1,103 +1,109 @@ { - "extension_name": { - "message": "Goose Highlighter" - }, - "extension_description": { - "message": "Destaque palavras e frases em qualquer site. Crie listas personalizadas, use cores, importe/exporte e muito mais." - }, - "select_list": { - "message": "Selecionar lista:" - }, - "new_list": { - "message": "Nova lista" - }, - "delete_list": { - "message": "Excluir lista" - }, - "list_name": { - "message": "Nome da lista:" - }, - "background": { - "message": "Fundo:" - }, - "foreground": { - "message": "Texto:" - }, - "enable_highlight": { - "message": "Ativar destaque" - }, - "apply": { - "message": "Aplicar" - }, - "paste_hint": { - "message": "Cole palavras ou frases aqui. Cada nova palavra/frase deve começar na próxima linha." - }, - "apply_paste": { - "message": "Adicionar palavras" - }, - "select_all": { - "message": "Selecionar" - }, - "delete_selected": { - "message": "Excluir" - }, - "disable_selected": { - "message": "Desativar" - }, - "enable_selected": { - "message": "Ativar" - }, - "import_list": { - "message": "Importar JSON" - }, - "export_list": { - "message": "Exportar JSON" - }, - "default_list_name": { - "message": "Lista padrão" - }, - "new_list_name": { - "message": "Nova lista" - }, - "word_active_label": { - "message": "ativo" - }, - "invalid_json_error": { - "message": "Arquivo JSON inválido" - }, - "confirm_delete_list": { - "message": "Tem certeza de que deseja excluir esta lista?" - }, - "confirm_delete_words": { - "message": "Tem certeza de que deseja excluir as palavras selecionadas?" - }, - "deselect_all": { - "message": "Desmarcar" - }, - "highlight_lists": { - "message": "Listas de destaque" - }, - "dark_mode": { - "message": "Modo escuro" - }, - "list_settings": { - "message": "Configurações da lista" - }, - "word_list": { - "message": "Lista de palavras" - }, - "add_words": { - "message": "Adicionar palavras" - }, - "global_highlight_toggle": { - "message": "Ativar" - }, - "search_placeholder": { + "extension_name": { + "message": "Goose Highlighter" + }, + "extension_description": { + "message": "Destaque palavras e frases em qualquer site. Crie listas personalizadas, use cores, importe/exporte e muito mais." + }, + "select_list": { + "message": "Selecionar lista:" + }, + "new_list": { + "message": "Nova lista" + }, + "delete_list": { + "message": "Excluir lista" + }, + "list_name": { + "message": "Nome da lista:" + }, + "background": { + "message": "Fundo:" + }, + "foreground": { + "message": "Texto:" + }, + "enable_highlight": { + "message": "Ativar destaque" + }, + "apply": { + "message": "Aplicar" + }, + "paste_hint": { + "message": "Cole palavras ou frases aqui. Cada nova palavra/frase deve começar na próxima linha." + }, + "apply_paste": { + "message": "Adicionar palavras" + }, + "select_all": { + "message": "Selecionar" + }, + "delete_selected": { + "message": "Excluir" + }, + "disable_selected": { + "message": "Desativar" + }, + "enable_selected": { + "message": "Ativar" + }, + "import_list": { + "message": "Importar JSON" + }, + "export_list": { + "message": "Exportar JSON" + }, + "default_list_name": { + "message": "Lista padrão" + }, + "new_list_name": { + "message": "Nova lista" + }, + "word_active_label": { + "message": "ativo" + }, + "invalid_json_error": { + "message": "Arquivo JSON inválido" + }, + "confirm_delete_list": { + "message": "Tem certeza de que deseja excluir esta lista?" + }, + "confirm_delete_words": { + "message": "Tem certeza de que deseja excluir as palavras selecionadas?" + }, + "deselect_all": { + "message": "Desmarcar" + }, + "highlight_lists": { + "message": "Listas de destaque" + }, + "dark_mode": { + "message": "Modo escuro" + }, + "list_settings": { + "message": "Configurações da lista" + }, + "word_list": { + "message": "Lista de palavras" + }, + "add_words": { + "message": "Adicionar palavras" + }, + "global_highlight_toggle": { + "message": "Ativar" + }, + "search_placeholder": { "message": "Pesquisar..." -}, - "options": { "message": "Opções" }, - "match_case": { "message": "Diferenciar maiúsculas/minúsculas" }, - "match_whole": { "message": "Palavra inteira" }, + }, + "options": { + "message": "Opções" + }, + "match_case": { + "message": "Diferenciar maiúsculas/minúsculas" + }, + "match_whole": { + "message": "Palavra inteira" + }, "site_exceptions": { "message": "Exceções de sites" }, @@ -172,5 +178,131 @@ }, "next": { "message": "Próximo" + }, + "duplicate": { + "message": "Duplicar" + }, + "merge": { + "message": "Mesclar" + }, + "move": { + "message": "Mover" + }, + "copy": { + "message": "Copiar" + }, + "merge_lists_min_two": { + "message": "Selecione pelo menos duas listas para mesclar." + }, + "merge_lists_confirm": { + "message": "Mesclar {count} lista(s) em \"{target}\"? As listas de origem serão removidas." + }, + "delete_current_list": { + "message": "Excluir lista atual?" + }, + "delete_lists_confirm": { + "message": "Excluir {count} lista(s) selecionada(s)?" + }, + "invalid_import_format": { + "message": "Formato de arquivo inválido. Selecione um arquivo de exportação válido do Goose Highlighter." + }, + "import_failed": { + "message": "Falha ao importar arquivo. Certifique-se de que é um arquivo JSON válido." + }, + "import_confirm": { + "message": "Importar {count} lista(s) com {words} palavra(s) no total?" + }, + "import_success": { + "message": "{count} lista(s) com {words} palavra(s) importada(s) com sucesso." + }, + "preview_label": { + "message": "Visualização" + }, + "preview_text": { + "message": "É assim que seu texto destacado aparecerá." + }, + "preview_text_before": { + "message": "É assim que seu" + }, + "preview_text_highlight": { + "message": "texto destacado" + }, + "preview_text_after": { + "message": "aparecerá." + }, + "enable_highlighting_title": { + "message": "Ativar destaque" + }, + "enable_highlighting_subtitle": { + "message": "Mostrar destaques nas páginas" + }, + "manage_lists": { + "message": "Gerenciar listas" + }, + "background_label": { + "message": "Fundo" + }, + "foreground_label": { + "message": "Texto" + }, + "multi_select_hint": { + "message": "Clique para selecionar • Ctrl/Cmd+Clique para seleção múltipla" + }, + "dark_mode_title": { + "message": "Modo escuro" + }, + "dark_mode_subtitle": { + "message": "Alternar entre tema claro/escuro" + }, + "list_manager_title": { + "message": "Gerenciador de listas" + }, + "words_label": { + "message": "palavras" + }, + "active_label": { + "message": "ativo" + }, + "inactive_label": { + "message": "inativo" + }, + "drag_words_hint": { + "message": "Clique para selecionar • Ctrl/Cmd+Clique para seleção múltipla • Arraste palavras para listas para copiar" + }, + "drag_lists_hint": { + "message": "Arraste listas para reordenar • Ctrl+Clique para seleção múltipla" + }, + "showing_items": { + "message": "Mostrando {start}-{end} de {total} palavras" + }, + "items_per_page": { + "message": "Itens por página:" + }, + "page_info": { + "message": "Página {current} de {total}" + }, + "toggle_active": { + "message": "alternar ativo" + }, + "rename_list_title": { + "message": "Renomear lista" + }, + "new_list_title": { + "message": "Nova lista" + }, + "delete_list_title": { + "message": "Excluir lista" + }, + "list_active_badge": { + "message": "Ativo" + }, + "list_paused_badge": { + "message": "Pausado" + }, + "words_stats": { + "message": "{total} palavras • {active} ativas • {inactive} inativas" + }, + "rename_list": { + "message": "Renomear lista" } } \ No newline at end of file diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index 1df5ad9..2c479cf 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -178,5 +178,132 @@ }, "next": { "message": "Следующее" + }, + "duplicate": { + "message": "Дублировать" + }, + "merge": { + "message": "Объединить" + }, + "move": { + "message": "Переместить" + }, + "copy": { + "message": "Копировать" + }, + "merge_lists_min_two": { + "message": "Выберите как минимум два списка для объединения." + }, + "merge_lists_confirm": { + "message": "Объединить {count} список(ов) в \"{target}\"? Исходные списки будут удалены." + }, + "delete_current_list": { + "message": "Удалить текущий список?" + }, + "delete_lists_confirm": { + "message": "Удалить {count} выбранный(ых) список(ов)?" + }, + "invalid_import_format": { + "message": "Неверный формат файла. Выберите действительный файл экспорта Goose Highlighter." + }, + "import_failed": { + "message": "Не удалось импортировать файл. Убедитесь, что это действительный файл JSON." + }, + "import_confirm": { + "message": "Импортировать {count} список(ов) с {words} словами всего?" + }, + "import_success": { + "message": "Успешно импортировано {count} список(ов) с {words} словами." +} +, + "preview_label": { + "message": "Предпросмотр" + }, + "preview_text": { + "message": "Так будет выглядеть выделенный текст." + }, + "preview_text_before": { + "message": "Так будет выглядеть" + }, + "preview_text_highlight": { + "message": "выделенный текст" + }, + "preview_text_after": { + "message": "." + }, + "enable_highlighting_title": { + "message": "Включить выделение" + }, + "enable_highlighting_subtitle": { + "message": "Выделять слова из выбранного списка" + }, + "manage_lists": { + "message": "Управление списками" + }, + "background_label": { + "message": "Фон" + }, + "foreground_label": { + "message": "Текст" + }, + "multi_select_hint": { + "message": "Нажмите для выбора • Ctrl/Cmd+Клик для множественного выбора" + }, + "dark_mode_title": { + "message": "Темная тема" + }, + "dark_mode_subtitle": { + "message": "Переключить светлую/темную тему" + }, + "list_manager_title": { + "message": "Управление списками" + }, + "words_label": { + "message": "слова" + }, + "active_label": { + "message": "активно" + }, + "inactive_label": { + "message": "неактивно" + }, + "drag_words_hint": { + "message": "Нажмите для выбора • Ctrl/Cmd+Клик для множественного выбора • Перетащите слова в списки для копирования" + }, + "drag_lists_hint": { + "message": "Перетащите для изменения порядка • Ctrl+Клик для множественного выбора" + }, + "showing_items": { + "message": "Показано {start}-{end} из {total} слов" + }, + "items_per_page": { + "message": "Элементов на странице:" + }, + "page_info": { + "message": "Страница {current} из {total}" + }, + "toggle_active": { + "message": "переключить активность" + }, + "rename_list_title": { + "message": "Переименовать список" + }, + "new_list_title": { + "message": "Новый список" + }, + "delete_list_title": { + "message": "Удалить список" + }, + "list_active_badge": { + "message": "Активен" + }, + "list_paused_badge": { + "message": "Приостановлен" + }, + "words_stats": { + "message": "{total} слов • {active} активных • {inactive} неактивных" + }, + "rename_list": { + "message": "Переименовать список" } } \ No newline at end of file diff --git a/_locales/tr/messages.json b/_locales/tr/messages.json index 299bb20..72c832a 100644 --- a/_locales/tr/messages.json +++ b/_locales/tr/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "Sonraki" + }, + "duplicate": { + "message": "Çoğalt" + }, + "merge": { + "message": "Birleştir" + }, + "move": { + "message": "Taşı" + }, + "copy": { + "message": "Kopyala" + }, + "merge_lists_min_two": { + "message": "Birleştirmek için en az iki liste seçin." + }, + "merge_lists_confirm": { + "message": "{count} listeyi \"{target}\" ile birleştir? Kaynak listeler kaldırılacak." + }, + "delete_current_list": { + "message": "Mevcut listeyi sil?" + }, + "delete_lists_confirm": { + "message": "Seçili {count} listeyi sil?" + }, + "invalid_import_format": { + "message": "Geçersiz dosya formatı. Lütfen geçerli bir Goose Highlighter dışa aktarma dosyası seçin." + }, + "import_failed": { + "message": "Dosya içe aktarılamadı. Lütfen geçerli bir JSON dosyası olduğundan emin olun." + }, + "import_confirm": { + "message": "Toplam {words} kelime içeren {count} liste içe aktarılsın mı?" + }, + "import_success": { + "message": "{words} kelime içeren {count} liste başarıyla içe aktarıldı." + }, + "preview_label": { + "message": "Önizleme" + }, + "preview_text": { + "message": "Vurgulanan metniniz böyle görünecek." + }, + "preview_text_before": { + "message": "Vurgulanan metniniz" + }, + "preview_text_highlight": { + "message": "böyle" + }, + "preview_text_after": { + "message": "görünecek." + }, + "enable_highlighting_title": { + "message": "Vurgulamayı Etkinleştir" + }, + "enable_highlighting_subtitle": { + "message": "Sayfalarda vurguları göster" + }, + "manage_lists": { + "message": "Listeleri Yönet" + }, + "background_label": { + "message": "Arka Plan" + }, + "foreground_label": { + "message": "Ön Plan" + }, + "multi_select_hint": { + "message": "Seçmek için tıklayın • Çoklu seçim için Ctrl/Cmd+Tıklama" + }, + "dark_mode_title": { + "message": "Karanlık Mod" + }, + "dark_mode_subtitle": { + "message": "Açık/koyu tema arasında geçiş yap" + }, + "list_manager_title": { + "message": "Liste Yöneticisi" + }, + "words_label": { + "message": "kelime" + }, + "active_label": { + "message": "aktif" + }, + "inactive_label": { + "message": "pasif" + }, + "drag_words_hint": { + "message": "Seçmek için tıklayın • Çoklu seçim için Ctrl/Cmd+Tıklama • Kopyalamak için kelimeleri listelere sürükleyin" + }, + "drag_lists_hint": { + "message": "Yeniden sıralamak için listeleri sürükleyin • Çoklu seçim için Ctrl+Tıklama" + }, + "showing_items": { + "message": "{total} kelimeden {start}-{end} gösteriliyor" + }, + "items_per_page": { + "message": "Sayfa başına öğe:" + }, + "page_info": { + "message": "Sayfa {current} / {total}" + }, + "toggle_active": { + "message": "aktif/pasif değiştir" + }, + "rename_list_title": { + "message": "Listeyi yeniden adlandır" + }, + "new_list_title": { + "message": "Yeni liste" + }, + "delete_list_title": { + "message": "Listeyi sil" + }, + "list_active_badge": { + "message": "Aktif" + }, + "list_paused_badge": { + "message": "Duraklatıldı" + }, + "words_stats": { + "message": "{total} kelime • {active} aktif • {inactive} pasif" + }, + "rename_list": { + "message": "Listeyi Yeniden Adlandır" } } \ No newline at end of file diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index ec3ec03..9a9e329 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -178,5 +178,131 @@ }, "next": { "message": "下一个" + }, + "duplicate": { + "message": "复制" + }, + "merge": { + "message": "合并" + }, + "move": { + "message": "移动" + }, + "copy": { + "message": "复制" + }, + "merge_lists_min_two": { + "message": "选择至少两个列表进行合并。" + }, + "merge_lists_confirm": { + "message": "将 {count} 个列表合并到 \"{target}\"?源列表将被删除。" + }, + "delete_current_list": { + "message": "删除当前列表?" + }, + "delete_lists_confirm": { + "message": "删除 {count} 个选定的列表?" + }, + "invalid_import_format": { + "message": "无效的文件格式。请选择有效的 Goose Highlighter 导出文件。" + }, + "import_failed": { + "message": "导入文件失败。请确保它是有效的 JSON 文件。" + }, + "import_confirm": { + "message": "导入 {count} 个列表,共 {words} 个单词?" + }, + "import_success": { + "message": "成功导入 {count} 个列表,共 {words} 个单词。" + }, + "preview_label": { + "message": "预览" + }, + "preview_text": { + "message": "您的高亮文本将如此显示。" + }, + "preview_text_before": { + "message": "您的" + }, + "preview_text_highlight": { + "message": "高亮文本" + }, + "preview_text_after": { + "message": "将如此显示。" + }, + "enable_highlighting_title": { + "message": "启用高亮" + }, + "enable_highlighting_subtitle": { + "message": "在页面上显示高亮" + }, + "manage_lists": { + "message": "管理列表" + }, + "background_label": { + "message": "背景" + }, + "foreground_label": { + "message": "前景" + }, + "multi_select_hint": { + "message": "点击选择 • Ctrl/Cmd+点击多选" + }, + "dark_mode_title": { + "message": "暗黑模式" + }, + "dark_mode_subtitle": { + "message": "切换亮色/暗色主题" + }, + "list_manager_title": { + "message": "列表管理器" + }, + "words_label": { + "message": "单词" + }, + "active_label": { + "message": "激活" + }, + "inactive_label": { + "message": "未激活" + }, + "drag_words_hint": { + "message": "点击选择 • Ctrl/Cmd+点击多选 • 拖动单词到列表以复制" + }, + "drag_lists_hint": { + "message": "拖动列表以重新排序 • Ctrl+点击多选" + }, + "showing_items": { + "message": "显示 {start}-{end} / 共 {total} 个单词" + }, + "items_per_page": { + "message": "每页项目数:" + }, + "page_info": { + "message": "第 {current} 页,共 {total} 页" + }, + "toggle_active": { + "message": "切换激活状态" + }, + "rename_list_title": { + "message": "重命名列表" + }, + "new_list_title": { + "message": "新建列表" + }, + "delete_list_title": { + "message": "删除列表" + }, + "list_active_badge": { + "message": "激活" + }, + "list_paused_badge": { + "message": "已暂停" + }, + "words_stats": { + "message": "{total} 个单词 • {active} 个激活 • {inactive} 个未激活" + }, + "rename_list": { + "message": "重命名列表" } } \ No newline at end of file diff --git a/list-manager/list-manager.css b/list-manager/list-manager.css index 6eb3b05..36f4308 100644 --- a/list-manager/list-manager.css +++ b/list-manager/list-manager.css @@ -1,8 +1,11 @@ +@import url('../shared/fonts.css'); @import url('../shared/colors.css'); @import url('../shared/ui-components.css'); * { box-sizing: border-box; + margin: 0; + padding: 0; } html { @@ -10,19 +13,17 @@ html { } body { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-family: var(--font-sans); + font-size: var(--text-base); + line-height: var(--leading-normal); + letter-spacing: var(--tracking-tight); margin: 0; - background: radial-gradient(120% 120% at 10% 0%, rgba(204, 106, 42, 0.08) 0%, transparent 45%), - linear-gradient(180deg, var(--bg-color) 0%, #f5efe9 100%); + background: var(--bg-color); color: var(--text-color); height: 100%; overflow: hidden; -} - -html.dark body, -body.dark { - background: radial-gradient(120% 120% at 10% 0%, rgba(242, 168, 101, 0.08) 0%, transparent 45%), - linear-gradient(180deg, var(--bg-color) 0%, #0f0d0b 100%); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .app { @@ -32,65 +33,115 @@ body.dark { overflow: hidden; } +.app button { + border-radius: 6px; +} + +.app .icon-btn { + min-width: 28px; + min-height: 28px; + border-radius: 6px; +} + .topbar { display: flex; align-items: center; justify-content: space-between; - padding: 16px 20px; - background: linear-gradient(145deg, #f6eee7 0%, #f0e8df 100%); + padding: 8px 16px; + background: var(--bg-color); border-bottom: 1px solid var(--input-border); - box-shadow: var(--shadow); -} - -html.dark .topbar, -body.dark .topbar { - background: linear-gradient(145deg, #2b211b 0%, #231a14 100%); + flex-shrink: 0; } .title { display: flex; align-items: center; - gap: 12px; + gap: 10px; } .title img { - height: 36px; - width: 36px; + height: 28px; + width: 28px; + border-radius: 8px; + background: var(--text-color); + padding: 4px; + object-fit: contain; +} + +html.dark .title img, +body.dark .title img { + background: var(--highlight-tag); } .name { font-weight: 600; - font-size: 1.05rem; + font-size: 13px; + color: var(--text-color); } .subtitle { - font-size: 0.85rem; - opacity: 0.7; + font-size: 11px; + opacity: 0.6; } -.topbar-actions { - display: flex; - gap: 10px; +.topbar-actions button { + min-height: 28px; + padding: 4px 10px; + font-size: 12px; + border-radius: 6px; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.topbar-actions button.primary { + background: var(--accent); + color: var(--accent-text); + border: none; +} + +.topbar-actions button.primary:hover { + background: var(--accent-hover); +} + +.topbar-actions button.ghost { + background: var(--input-bg); + border: 1px solid var(--input-border); + color: var(--text-color); +} + +.topbar-actions button.ghost:hover { + background: var(--section-bg); +} + +.topbar-actions .icon-toggle { + width: 28px; + height: 28px; + padding: 0; + border-radius: 6px; + display: inline-flex; + align-items: center; + justify-content: center; } .layout { display: grid; grid-template-columns: minmax(280px, 25%) 1fr; - gap: 16px; - padding: 16px; + gap: 12px; + padding: 12px; flex: 1; overflow: hidden; min-height: 0; } .panel { - background: var(--panel-bg); + background: var(--section-bg); border: 1px solid var(--input-border); - border-radius: var(--border-radius); - padding: 14px; + border-radius: 8px; + padding: 12px; display: flex; flex-direction: column; - gap: 12px; + gap: 10px; overflow: hidden; min-height: 0; } @@ -99,13 +150,13 @@ body.dark .topbar { display: flex; align-items: center; justify-content: space-between; - gap: 12px; + gap: 10px; } .lists-panel .panel-header { flex-direction: column; align-items: flex-start; - gap: 8px; + gap: 6px; } .lists-panel .panel-header h2 { @@ -114,12 +165,14 @@ body.dark .topbar { .panel-header h2 { margin: 0; - font-size: 1rem; + font-size: 13px; + font-weight: 600; + color: var(--text-color); } .panel-actions { display: flex; - gap: 8px; + gap: 6px; flex-wrap: wrap; } @@ -129,8 +182,10 @@ body.dark .topbar { } .lists-panel .panel-actions button { - padding: 6px 10px; - font-size: 0.8rem; + padding: 4px 8px; + font-size: 12px; + border-radius: 6px; + min-height: 28px; } .panel-actions.secondary { @@ -138,82 +193,46 @@ body.dark .topbar { gap: 6px; } +.panel-actions.secondary button { + padding: 4px 8px; + font-size: 12px; + border-radius: 6px; + min-height: 28px; +} + .list-hint { - font-size: 0.8rem; - opacity: 0.7; - margin-top: -4px; + font-size: 11px; + opacity: 0.6; + margin-top: -2px; } .selection-hint { - font-size: 0.75rem; + font-size: 12px; + color: var(--text-color); opacity: 0.6; margin-top: 4px; font-style: italic; + text-align: center; } .lists { display: flex; flex-direction: column; - gap: 10px; + gap: 8px; overflow-y: auto; padding-right: 4px; flex: 1; min-height: 0; } -/* Custom scrollbar styling - List Manager Specific */ -.lists::-webkit-scrollbar, -.word-list::-webkit-scrollbar { - width: 8px; -} - -.lists::-webkit-scrollbar-track, -.word-list::-webkit-scrollbar-track { - background: #f0e8df; - border-radius: 10px; -} - -.lists::-webkit-scrollbar-thumb, -.word-list::-webkit-scrollbar-thumb { - background: var(--input-border); - border-radius: 10px; - transition: background 0.2s ease; -} - -.lists::-webkit-scrollbar-thumb:hover, -.word-list::-webkit-scrollbar-thumb:hover { - background: #d4c4b8; -} - -html.dark .lists::-webkit-scrollbar-track, -html.dark .word-list::-webkit-scrollbar-track, -body.dark .lists::-webkit-scrollbar-track, -body.dark .word-list::-webkit-scrollbar-track { - background: #1a1511; -} - -html.dark .lists::-webkit-scrollbar-thumb, -html.dark .word-list::-webkit-scrollbar-thumb, -body.dark .lists::-webkit-scrollbar-thumb, -body.dark .word-list::-webkit-scrollbar-thumb { - background: var(--input-border); -} - -html.dark .lists::-webkit-scrollbar-thumb:hover, -html.dark .word-list::-webkit-scrollbar-thumb:hover, -body.dark .lists::-webkit-scrollbar-thumb:hover, -body.dark .word-list::-webkit-scrollbar-thumb:hover { - background: #4a3e36; -} - .list-item { - background: #ffffff; + background: var(--input-bg); border: 2px solid transparent; - border-radius: 12px; - padding: 10px 12px; + border-radius: 8px; + padding: 8px 10px; display: grid; grid-template-columns: 1fr auto; - gap: 10px; + gap: 8px; align-items: center; cursor: pointer; transition: all 0.2s ease; @@ -221,52 +240,28 @@ body.dark .word-list::-webkit-scrollbar-thumb:hover { } .list-item:hover { - background: #f9f4f0; - border-color: rgba(204, 106, 42, 0.3); + background: var(--section-bg); + border-color: var(--input-border); } .list-item.active { border-color: var(--accent); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); - background: #fffaf6; + box-shadow: var(--shadow-sm); + background: var(--section-bg); } .list-item.selected { - background: rgba(204, 106, 42, 0.1); + background: var(--section-bg); border-color: rgba(204, 106, 42, 0.5); } -.list-item.selected.active { - border-color: var(--accent); - background: rgba(204, 106, 42, 0.15); -} - -html.dark .list-item, -body.dark .list-item { - background: #1f1813; -} - -html.dark .list-item:hover, -body.dark .list-item:hover { - background: #251f19; - border-color: rgba(242, 168, 101, 0.3); -} - -html.dark .list-item.active, -body.dark .list-item.active { - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); - background: #2a2218; -} - html.dark .list-item.selected, body.dark .list-item.selected { - background: rgba(242, 168, 101, 0.15); - border-color: rgba(242, 168, 101, 0.6); + border-color: rgba(255, 140, 0, 0.5); } -html.dark .list-item.selected.active, -body.dark .list-item.selected.active { - background: rgba(242, 168, 101, 0.2); +.list-item.selected.active { + border-color: var(--accent); } .list-item.drag-over { @@ -282,19 +277,31 @@ body.dark .list-item.selected.active { .list-name { font-weight: 600; + font-size: 13px; } .list-stats { - font-size: 0.75rem; + font-size: 11px; opacity: 0.7; } .list-badge { - font-size: 0.75rem; - padding: 4px 8px; + font-size: 11px; + padding: 2px 6px; border-radius: 999px; border: 1px solid var(--input-border); opacity: 0.8; + cursor: pointer; + user-select: none; +} + +.list-badge:hover { + opacity: 1; +} + +.list-badge:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; } .details-panel { @@ -308,17 +315,12 @@ body.dark .list-item.selected.active { .list-settings { display: none; gap: 8px; - padding: 8px; - background: rgba(204, 106, 42, 0.05); - border-radius: 8px; + padding: 8px 10px; + background: var(--input-bg); + border-radius: 6px; border: 1px solid var(--input-border); } -html.dark .list-settings, -body.dark .list-settings { - background: rgba(242, 168, 101, 0.08); -} - .list-settings.expanded { display: flex; flex-direction: column; @@ -327,7 +329,8 @@ body.dark .list-settings { .list-settings input[type="text"] { width: 100%; padding: 6px 10px; - font-size: 0.9rem; + font-size: 13px; + border-radius: 6px; } .color-row { @@ -340,7 +343,7 @@ body.dark .list-settings { display: flex; align-items: center; gap: 6px; - font-size: 0.85rem; + font-size: 12px; flex: 1; } @@ -356,9 +359,11 @@ body.dark .list-settings { } .compact-btn { - padding: 6px 12px; + padding: 4px 10px; min-width: auto; height: 32px; + border-radius: 6px; + font-size: 13px; } .compact-header { @@ -375,7 +380,8 @@ body.dark .list-settings { .list-title-section h2 { margin: 0; - font-size: 1rem; + font-size: 13px; + font-weight: 600; max-width: 300px; overflow: hidden; text-overflow: ellipsis; @@ -392,100 +398,132 @@ body.dark .list-settings { .add-words { display: flex; gap: 10px; - align-items: stretch; + align-items: flex-start; } .add-words textarea { flex: 1; - min-height: 64px; + min-height: 56px; resize: vertical; background: var(--input-bg); color: var(--text-color); border: 1px solid var(--input-border); - border-radius: 10px; - padding: 8px 10px; + border-radius: 8px; + padding: 6px 10px; + font-size: 13px; +} + +.add-words textarea:focus { + outline: none; + border-color: var(--accent); } .add-words button { - min-width: 120px; + min-width: 100px; + height: 32px; + border-radius: 6px; + font-size: 13px; + flex-shrink: 0; } +/* Word controls: action row matches popup .word-actions-row / .word-action-btn */ .word-controls .row { display: flex; - gap: 8px; flex-wrap: wrap; + gap: 6px; + align-items: center; +} + +.word-controls .row button { + height: 26px; + padding: 0 8px; + font-size: 12px; + border-radius: 6px; + background: var(--input-bg); + border: 1px solid var(--input-border); + color: var(--text-color); +} + +.word-controls .row button:hover { + background: var(--section-bg); +} + +.word-controls .row button.danger { + background: rgba(239, 68, 68, 0.1); + border-color: rgba(239, 68, 68, 0.3); + color: var(--danger); +} + +.word-controls .row button.danger:hover { + background: rgba(239, 68, 68, 0.2); } .word-controls input[type="text"], .word-controls select { flex: 1; - min-width: 160px; + min-width: 140px; + min-height: 32px; + padding: 0 10px; + font-size: 14px; + border-radius: 8px; } +#wordSearch { + height: 32px; + padding: 0 10px; + font-size: 14px; + border-radius: 8px; +} + +/* Search/move row: align input, select and buttons to same height */ +.word-controls .row:has(#wordSearch) button { + height: 32px; +} + +/* Word list container – matches popup .word-list-container */ .word-list { + flex: 1; overflow-y: auto; + background: var(--input-bg); border: 1px solid var(--input-border); - border-radius: 12px; - padding: 8px; - background: #f9f4f0; + border-radius: 8px; + min-height: 0; display: flex; flex-direction: column; - gap: 8px; - flex: 1 1 0; - min-height: 0; } -html.dark .word-list, -body.dark .word-list { - background: #1a1511; -} - -.empty { - padding: 12px; +.word-list .empty { + padding: 16px; text-align: center; - opacity: 0.7; - font-size: 0.9rem; + font-size: 14px; + color: var(--text-color); + opacity: 0.6; } +/* Word item – matches popup .word-item (flex row, border-bottom, left accent when selected) */ .word-item { - display: grid; - grid-template-columns: 1fr auto auto auto auto; - gap: 8px; + display: flex; align-items: center; - padding: 8px 10px; - border-radius: 10px; - background: #ffffff; - border: 2px solid transparent; + gap: 8px; + padding: 6px 10px; cursor: pointer; - transition: all 0.2s ease; - position: relative; + transition: all 0.2s; + border-bottom: 1px solid var(--input-border); + min-width: 0; +} + +.word-item:last-child { + border-bottom: none; } .word-item:hover { - background: #f9f4f0; - border-color: rgba(204, 106, 42, 0.2); + background: var(--highlight-tag); } .word-item.selected { - background: rgba(204, 106, 42, 0.1); - border-color: rgba(204, 106, 42, 0.5); -} - -html.dark .word-item, -body.dark .word-item { - background: #201915; -} - -html.dark .word-item:hover, -body.dark .word-item:hover { - background: #2a2218; - border-color: rgba(242, 168, 101, 0.2); -} - -html.dark .word-item.selected, -body.dark .word-item.selected { - background: rgba(242, 168, 101, 0.15); - border-color: rgba(242, 168, 101, 0.6); + background: var(--section-bg); + border-left: 3px solid var(--accent); + padding-left: 9px; } .word-item.disabled { @@ -493,10 +531,13 @@ body.dark .word-item.selected { } .word-text { - font-size: 0.9rem; + flex: 1; + font-size: 14px; + color: var(--text-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + min-width: 0; user-select: none; } @@ -506,13 +547,19 @@ body.dark .word-item.selected { .word-edit-input { display: none; - width: 100%; - background: var(--input-bg); - color: var(--text-color); + flex: 1; + height: 28px; + padding: 0 8px; + background: var(--bg-color); border: 1px solid var(--accent); - border-radius: 8px; - padding: 4px 8px; - font-size: 0.9rem; + border-radius: 4px; + font-size: 14px; + color: var(--text-color); + min-width: 0; +} + +.word-edit-input:focus { + outline: none; } .word-edit-input.active { @@ -521,8 +568,9 @@ body.dark .word-item.selected { .word-actions { display: flex; - gap: 4px; align-items: center; + gap: 4px; + flex-shrink: 0; pointer-events: auto; } @@ -530,35 +578,79 @@ body.dark .word-item.selected { pointer-events: auto; } - - -input[type="color"] { +/* Word item icon button – matches popup .word-item-icon-btn */ +.word-item .icon-btn { + width: 28px; + height: 28px; + min-width: 28px; + min-height: 28px; padding: 0; - height: 36px; - border-radius: 10px; + background: transparent; + border: none; + border-radius: 4px; + color: var(--text-color); + opacity: 0.6; +} + +.word-item .icon-btn:hover { + opacity: 1; + background: var(--highlight-tag); + color: var(--accent); +} + +.word-item .icon-btn i { + font-size: 14px; +} + +/* Word item color picker – matches popup .word-item-color-picker */ +.word-item input[type="color"] { + width: 28px; + height: 28px; + border-radius: 4px; border: 1px solid var(--input-border); - background: #1f1813; cursor: pointer; + padding: 0; + flex-shrink: 0; +} + +.word-item input[type="color"]::-webkit-color-swatch-wrapper { + padding: 0; + border-radius: 3px; +} + +.word-item input[type="color"]::-webkit-color-swatch { + border: none; + border-radius: 3px; +} + +.word-item input[type="color"]:hover { + border-color: var(--accent); +} + +.word-item .word-item-eye-toggle { + flex-shrink: 0; +} + + + +.app input[type="color"] { + padding: 0; + height: 32px; + border-radius: 6px; + border: 1px solid var(--input-border); + cursor: pointer; +} + +.app input[type="color"]:hover { + border-color: var(--accent); } .colors input[type="color"] { width: 100%; } -.word-item input[type="color"] { - width: 38px; - height: 28px; - border-radius: 8px; - cursor: pointer; -} - -.word-item input[type="color"]:hover { - transform: scale(1.05); - transition: transform 0.2s ease; -} - .stats { - font-size: 0.85rem; + font-size: 12px; opacity: 0.7; } @@ -567,22 +659,17 @@ input[type="color"] { flex-direction: row; align-items: center; justify-content: space-between; - gap: 12px; - padding: 8px 12px; - background: #f9f4f0; + gap: 10px; + padding: 6px 10px; + background: var(--section-bg); border: 1px solid var(--input-border); - border-radius: 12px; + border-radius: 8px; flex-shrink: 0; flex-wrap: wrap; } -html.dark .pagination-container, -body.dark .pagination-container { - background: #1a1511; -} - .pagination-info { - font-size: 0.8rem; + font-size: 12px; opacity: 0.8; white-space: nowrap; } @@ -594,9 +681,9 @@ body.dark .pagination-container { } .pagination-btn { - background: var(--button-bg); + background: var(--input-bg); border: 1px solid var(--input-border); - color: var(--button-text); + color: var(--text-color); border-radius: 6px; padding: 4px 6px; cursor: pointer; @@ -606,11 +693,11 @@ body.dark .pagination-container { justify-content: center; min-width: 28px; min-height: 28px; - font-size: 0.75rem; + font-size: 12px; } .pagination-btn:hover:not(:disabled) { - background: var(--button-hover); + background: var(--section-bg); border-color: var(--accent); } @@ -622,11 +709,11 @@ body.dark .pagination-container { .pagination-pages { display: flex; align-items: center; - padding: 0 8px; + padding: 0 6px; } .page-info { - font-size: 0.8rem; + font-size: 12px; opacity: 0.9; font-weight: 500; } @@ -635,7 +722,7 @@ body.dark .pagination-container { display: flex; align-items: center; gap: 6px; - font-size: 0.8rem; + font-size: 12px; } .page-size-controls label { @@ -649,7 +736,7 @@ body.dark .pagination-container { border: 1px solid var(--input-border); border-radius: 6px; padding: 3px 6px; - font-size: 0.8rem; + font-size: 12px; min-width: 55px; } diff --git a/list-manager/list-manager.html b/list-manager/list-manager.html index a7caf9d..ebf0b64 100644 --- a/list-manager/list-manager.html +++ b/list-manager/list-manager.html @@ -4,10 +4,9 @@ - Goose Highlighter - List Manager + Goose Highlighter - List Manager - @@ -16,18 +15,18 @@
Goose Highlighter
-
Goose Highlighter
-
List Manager
+
Goose Highlighter
+
List Manager
-
@@ -35,18 +34,14 @@
-

Lists

+

Lists

- - - + + +
-
- - -
-
Drag lists to reorder • Ctrl+Click for multi-select
+
Drag lists to reorder • Ctrl+Click for multi-select
@@ -54,22 +49,22 @@

Selected List

-
0 words
@@ -71,13 +74,13 @@ - - - @@ -85,20 +88,20 @@
- +
- +
@@ -108,10 +111,12 @@
- +

- This is how your highlighted text will appear. + This is how your + highlighted text + will appear.

@@ -120,8 +125,8 @@
-

Enable Highlighting

-

Show highlights on pages

+

Enable Highlighting

+

Show highlights on pages

@@ -246,15 +250,16 @@
- -
-
-
- - + +
+
+
+

Options

+ +
+
+
+
+
+

Dark Mode

+

Toggle dark/light theme

+
+ +
+
+
+
${HighlightEngine.renderHighlighted(text, pattern)}
`; diff --git a/src/list-manager/ListManagerController.ts b/src/list-manager/ListManagerController.ts index 82dd072..4ec0ebd 100644 --- a/src/list-manager/ListManagerController.ts +++ b/src/list-manager/ListManagerController.ts @@ -45,8 +45,6 @@ async initialize(): Promise { document.getElementById('duplicateListBtn')?.addEventListener('click', () => this.duplicateCurrentList()); document.getElementById('mergeListsBtn')?.addEventListener('click', () => this.mergeSelectedLists()); document.getElementById('deleteListsBtn')?.addEventListener('click', () => this.deleteSelectedLists()); - document.getElementById('activateListsBtn')?.addEventListener('click', () => this.setSelectedListsActive(true)); - document.getElementById('deactivateListsBtn')?.addEventListener('click', () => this.setSelectedListsActive(false)); document.getElementById('editListNameBtn')?.addEventListener('click', () => this.toggleListSettings()); document.getElementById('applyListSettingsBtn')?.addEventListener('click', () => this.applyListSettings()); document.getElementById('importListBtn')?.addEventListener('click', () => this.triggerImport()); @@ -74,6 +72,7 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; const listsContainer = document.getElementById('listsContainer'); listsContainer?.addEventListener('click', (e) => this.handleListClick(e)); + listsContainer?.addEventListener('keydown', (e) => this.handleListsKeydown(e)); listsContainer?.addEventListener('dragstart', (e) => this.handleDragStart(e)); listsContainer?.addEventListener('dragover', (e) => this.handleDragOver(e)); listsContainer?.addEventListener('drop', (e) => this.handleDrop(e)); @@ -140,7 +139,7 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; private mergeSelectedLists(): void { const selected = this.getSelectedListIndices(); if (selected.length < 2) { - alert('Select at least two lists to merge.'); + alert(chrome.i18n.getMessage('merge_lists_min_two') || 'Select at least two lists to merge.'); return; } @@ -148,7 +147,10 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; const target = this.lists[targetIndex]; if (!target) return; - const confirmMessage = `Merge ${selected.length - 1} list(s) into "${target.name}"? Source lists will be removed.`; + const confirmMessage = chrome.i18n.getMessage('merge_lists_confirm') + ?.replace('{count}', String(selected.length - 1)) + .replace('{target}', target.name) + || `Merge ${selected.length - 1} list(s) into "${target.name}"? Source lists will be removed.`; if (!confirm(confirmMessage)) return; const sourceIndices = selected.filter(index => index !== targetIndex).sort((a, b) => b - a); @@ -169,10 +171,13 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; const selected = this.getSelectedListIndices(); if (selected.length === 0) { if (!this.lists[this.currentListIndex]) return; - if (!confirm('Delete current list?')) return; + if (!confirm(chrome.i18n.getMessage('delete_current_list') || 'Delete current list?')) return; this.lists.splice(this.currentListIndex, 1); } else { - if (!confirm(`Delete ${selected.length} selected list(s)?`)) return; + const confirmMessage = chrome.i18n.getMessage('delete_lists_confirm') + ?.replace('{count}', String(selected.length)) + || `Delete ${selected.length} selected list(s)?`; + if (!confirm(confirmMessage)) return; selected.sort((a, b) => b - a).forEach(index => this.lists.splice(index, 1)); } @@ -186,17 +191,12 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; this.save(); } - private setSelectedListsActive(active: boolean): void { - const selected = this.getSelectedListIndices(); - if (selected.length === 0) { - const list = this.lists[this.currentListIndex]; - if (list) list.active = active; - } else { - selected.forEach(index => { - if (this.lists[index]) this.lists[index].active = active; - }); + private toggleListActive(index: number): void { + const list = this.lists[index]; + if (list) { + list.active = !list.active; + this.save(); } - this.save(); } private applyListSettings(): void { @@ -265,13 +265,14 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; const data = JSON.parse(text); if (!this.validateImportData(data)) { - alert('Invalid file format. Please select a valid Goose Highlighter export file.'); + alert(chrome.i18n.getMessage('invalid_import_format') || 'Invalid file format. Please select a valid Goose Highlighter export file.'); return; } this.importLists(data); } catch (error) { console.error('Import error:', error); + alert(chrome.i18n.getMessage('import_failed') || 'Failed to import file. Please ensure it is a valid JSON file.'); alert('Failed to import file. Please ensure it is a valid JSON file.'); } } @@ -361,7 +362,10 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; private deleteSelectedWords(): void { const list = this.lists[this.currentListIndex]; if (!list || this.selectedWords.size === 0) return; - if (!confirm(`Delete ${this.selectedWords.size} selected word(s)?`)) return; + const confirmMessage = chrome.i18n.getMessage('confirm_delete_words') + ?.replace('{count}', String(this.selectedWords.size)) + || `Delete ${this.selectedWords.size} selected word(s)?`; + if (!confirm(confirmMessage)) return; list.words = list.words.filter((_, i) => !this.selectedWords.has(i)); this.selectedWords.clear(); @@ -429,6 +433,14 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; const index = Number(listItem.dataset.index); if (Number.isNaN(index)) return; + // Click on active/paused badge toggles that list's active state + if (target.closest('.list-badge')) { + event.preventDefault(); + event.stopPropagation(); + this.toggleListActive(index); + return; + } + const mouseEvent = event as MouseEvent; // Ctrl/Cmd + click for multi-select if (mouseEvent.ctrlKey || mouseEvent.metaKey) { @@ -449,6 +461,18 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; this.render(); } + private handleListsKeydown(event: KeyboardEvent): void { + const target = event.target as HTMLElement; + const badge = target.closest('.list-badge'); + if (!badge) return; + const listItem = badge.closest('.list-item') as HTMLElement | null; + if (!listItem) return; + if (event.key !== 'Enter' && event.key !== ' ') return; + event.preventDefault(); + const index = Number(listItem.dataset.index); + if (!Number.isNaN(index)) this.toggleListActive(index); + } + private handleDragStart(event: DragEvent): void { const target = (event.target as HTMLElement).closest('.list-item') as HTMLElement | null; if (!target) return; @@ -595,16 +619,8 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; return; } - // Handle toggle button click - if (target.classList.contains('toggle-btn')) { - event.stopPropagation(); - const index = Number(target.dataset.index); - if (Number.isNaN(index)) return; - const word = list.words[index]; - if (word) { - word.active = !word.active; - this.save(); - } + // Don't select if clicking on eye toggle + if (target.closest('.word-item-eye-toggle')) { return; } @@ -655,6 +671,22 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; const list = this.lists[this.currentListIndex]; if (!list) return; + // Handle eye toggle (active/disabled) + if (target.classList.contains('word-item-eye-input')) { + const wordItem = target.closest('.word-item') as HTMLElement; + if (wordItem) { + const index = Number(wordItem.dataset.index); + if (!Number.isNaN(index)) { + const word = list.words[index]; + if (word) { + word.active = target.checked; + this.save(); + } + } + } + return; + } + const editIndex = Number(target.dataset.bgEdit ?? target.dataset.fgEdit ?? -1); if (Number.isNaN(editIndex) || editIndex < 0) return; @@ -749,12 +781,20 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; if (this.selectedLists.has(index)) item.classList.add('selected'); item.draggable = true; item.dataset.index = index.toString(); + + const wordsLabel = chrome.i18n.getMessage('words_label') || 'words'; + const activeLabel = chrome.i18n.getMessage('active_label') || 'active'; + const badgeText = list.active + ? (chrome.i18n.getMessage('list_active_badge') || 'Active') + : (chrome.i18n.getMessage('list_paused_badge') || 'Paused'); + const toggleBadgeTitle = chrome.i18n.getMessage('toggle_active') || 'Toggle active'; + item.innerHTML = `
${DOMUtils.escapeHtml(list.name)}
-
${total} words • ${activeCount} active
+
${total} ${wordsLabel} • ${activeCount} ${activeLabel}
-
${list.active ? 'Active' : 'Paused'}
+
${badgeText}
`; container.appendChild(item); }); @@ -777,7 +817,10 @@ const wordSearch = document.getElementById('wordSearch') as HTMLInputElement; if (stats) { const activeCount = list.words.filter(word => word.active).length; const inactiveCount = list.words.length - activeCount; - stats.textContent = `${list.words.length} words • ${activeCount} active • ${inactiveCount} inactive`; + const wordsLabel = chrome.i18n.getMessage('words_label') || 'words'; + const activeLabel = chrome.i18n.getMessage('active_label') || 'active'; + const inactiveLabel = chrome.i18n.getMessage('inactive_label') || 'inactive'; + stats.textContent = `${list.words.length} ${wordsLabel} • ${activeCount} ${activeLabel} • ${inactiveCount} ${inactiveLabel}`; } // Collapse settings panel when switching lists @@ -811,7 +854,8 @@ private renderWords(): void { this.totalWords = entries.length; if (entries.length === 0) { - wordList.innerHTML = '
No words in this list.
'; + const emptyMessage = chrome.i18n.getMessage('no_words_in_list') || 'No words in this list.'; + wordList.innerHTML = `
${emptyMessage}
`; this.renderPaginationControls(); return; } @@ -820,6 +864,11 @@ private renderWords(): void { const endIndex = Math.min(startIndex + this.pageSize, this.totalWords); const paginatedEntries = entries.slice(startIndex, endIndex); + const editWordTitle = chrome.i18n.getMessage('edit_word') || 'Edit word'; + const bgColorTitle = chrome.i18n.getMessage('background_color_title') || 'Background color'; + const fgColorTitle = chrome.i18n.getMessage('text_color_title') || 'Text color'; + const toggleActiveTitle = chrome.i18n.getMessage('toggle_active') || 'Toggle active'; + wordList.innerHTML = paginatedEntries.map(entry => { const word = entry.word; const index = entry.index; @@ -829,12 +878,18 @@ private renderWords(): void { ${DOMUtils.escapeHtml(word.wordStr)}
- - - - + + +
`; @@ -849,38 +904,55 @@ private renderWords(): void { const totalPages = Math.ceil(this.totalWords / this.pageSize); -if (totalPages <= 1) { + if (totalPages <= 1) { paginationContainer.style.display = 'none'; return; } -const startItem = (this.currentPage - 1) * this.pageSize + 1; + const startItem = (this.currentPage - 1) * this.pageSize + 1; const endItem = Math.min(this.currentPage * this.pageSize, this.totalWords); + const showingText = chrome.i18n.getMessage('showing_items') + ?.replace('{start}', String(startItem)) + .replace('{end}', String(endItem)) + .replace('{total}', String(this.totalWords)) + || `Showing ${startItem}-${endItem} of ${this.totalWords} words`; + + const pageInfoText = chrome.i18n.getMessage('page_info') + ?.replace('{current}', String(this.currentPage)) + .replace('{total}', String(totalPages)) + || `Page ${this.currentPage} of ${totalPages}`; + + const itemsPerPageLabel = chrome.i18n.getMessage('items_per_page') || 'Items per page:'; + const firstPageTitle = chrome.i18n.getMessage('first_page') || 'First page'; + const prevPageTitle = chrome.i18n.getMessage('previous_page') || 'Previous page'; + const nextPageTitle = chrome.i18n.getMessage('next_page') || 'Next page'; + const lastPageTitle = chrome.i18n.getMessage('last_page') || 'Last page'; + paginationContainer.style.display = 'flex'; paginationContainer.innerHTML = `
- Showing ${startItem}-${endItem} of ${this.totalWords} words + ${showingText}
- -
- Page ${this.currentPage} of ${totalPages} + ${pageInfoText}
- -
- +
@@ -913,9 +934,12 @@ export class PopupController { -
@@ -955,7 +979,10 @@ export class PopupController { container.innerHTML = this.exceptionsList.map(domain => `
${DOMUtils.escapeHtml(domain)} - +
` ).join(''); } diff --git a/src/popup/popup.ts b/src/popup/popup.ts index 064c78d..608a371 100644 --- a/src/popup/popup.ts +++ b/src/popup/popup.ts @@ -20,6 +20,17 @@ function localizePage(): void { } } }); + + const titleElements = document.querySelectorAll('[data-i18n-title]'); + titleElements.forEach(element => { + const key = element.getAttribute('data-i18n-title'); + if (key) { + const translation = chrome.i18n.getMessage(key); + if (translation) { + element.setAttribute('title', translation); + } + } + }); } function displayVersion(): void {