From 35a5d9108c742af0729cfc650987ad2eca629ea0 Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Fri, 1 May 2026 17:51:12 +0900 Subject: [PATCH 1/8] feat(app): add Copy Conversation ID menu item to conversation detail Adds a new entry under "Copy Summary" in the conversation detail three-dots menu that copies `ServerConversation.id` to the clipboard and shows a snackbar on success. The raw ID can be passed directly to the Omi MCP `conversation_id` argument from external tools (Claude Code, ChatGPT, etc.), removing the need to query the conversation list and guess the right one. The implementation inlines `Clipboard.setData` + `ScaffoldMessenger` + `HapticFeedback.lightImpact()` in `_handleMenuSelection` rather than reusing `_copyContent`, so a dedicated `conversationIdCopied` snackbar message can be shown instead of the generic `contentCopied`. --- app/lib/pages/conversation_detail/page.dart | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/lib/pages/conversation_detail/page.dart b/app/lib/pages/conversation_detail/page.dart index d05dfba0b6..9558f7436b 100644 --- a/app/lib/pages/conversation_detail/page.dart +++ b/app/lib/pages/conversation_detail/page.dart @@ -355,6 +355,13 @@ class _ConversationDetailPageState extends State with Ti await provider.reprocessConversation(); } break; + case 'copy_conversation_id': + Clipboard.setData(ClipboardData(text: provider.conversation.id)); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(context.l10n.conversationIdCopied)), + ); + HapticFeedback.lightImpact(); + break; case 'delete': _handleDelete(context, provider); break; @@ -810,6 +817,11 @@ class _ConversationDetailPageState extends State with Ti iconWidget: FaIcon(FontAwesomeIcons.clone, size: 16), onTap: () => _handleMenuSelection(context, 'copy_summary', provider), ), + PullDownMenuItem( + title: context.l10n.copyConversationId, + iconWidget: FaIcon(FontAwesomeIcons.fingerprint, size: 16), + onTap: () => _handleMenuSelection(context, 'copy_conversation_id', provider), + ), if (provider.conversation.hasAudio()) PullDownMenuItem( title: context.l10n.shareAudio, From 70bfbf1766b5ac9c85f3d7b0f2ff26cbab4b4677 Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Fri, 1 May 2026 17:51:45 +0900 Subject: [PATCH 2/8] feat(l10n): add copyConversationId / conversationIdCopied keys for all 49 locales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds two new ARB keys consumed by the Copy Conversation ID menu item: - `copyConversationId` — pull-down menu label - `conversationIdCopied` — snackbar shown after copy Translations are added to all 49 supported locales (the English base plus 48 others) so no locale falls back to the English source text. --- app/lib/l10n/app_ar.arb | 2 ++ app/lib/l10n/app_be.arb | 2 ++ app/lib/l10n/app_bg.arb | 2 ++ app/lib/l10n/app_bn.arb | 2 ++ app/lib/l10n/app_bs.arb | 2 ++ app/lib/l10n/app_ca.arb | 2 ++ app/lib/l10n/app_cs.arb | 2 ++ app/lib/l10n/app_da.arb | 2 ++ app/lib/l10n/app_de.arb | 2 ++ app/lib/l10n/app_el.arb | 2 ++ app/lib/l10n/app_en.arb | 8 ++++++++ app/lib/l10n/app_es.arb | 2 ++ app/lib/l10n/app_et.arb | 2 ++ app/lib/l10n/app_fa.arb | 2 ++ app/lib/l10n/app_fi.arb | 2 ++ app/lib/l10n/app_fr.arb | 2 ++ app/lib/l10n/app_he.arb | 2 ++ app/lib/l10n/app_hi.arb | 2 ++ app/lib/l10n/app_hr.arb | 2 ++ app/lib/l10n/app_hu.arb | 2 ++ app/lib/l10n/app_id.arb | 2 ++ app/lib/l10n/app_it.arb | 2 ++ app/lib/l10n/app_ja.arb | 2 ++ app/lib/l10n/app_kn.arb | 2 ++ app/lib/l10n/app_ko.arb | 2 ++ app/lib/l10n/app_lt.arb | 2 ++ app/lib/l10n/app_lv.arb | 2 ++ app/lib/l10n/app_mk.arb | 2 ++ app/lib/l10n/app_mr.arb | 2 ++ app/lib/l10n/app_ms.arb | 2 ++ app/lib/l10n/app_nl.arb | 2 ++ app/lib/l10n/app_no.arb | 2 ++ app/lib/l10n/app_pl.arb | 2 ++ app/lib/l10n/app_pt.arb | 2 ++ app/lib/l10n/app_ro.arb | 2 ++ app/lib/l10n/app_ru.arb | 2 ++ app/lib/l10n/app_sk.arb | 2 ++ app/lib/l10n/app_sl.arb | 2 ++ app/lib/l10n/app_sr.arb | 2 ++ app/lib/l10n/app_sv.arb | 2 ++ app/lib/l10n/app_ta.arb | 2 ++ app/lib/l10n/app_te.arb | 2 ++ app/lib/l10n/app_th.arb | 2 ++ app/lib/l10n/app_tl.arb | 2 ++ app/lib/l10n/app_tr.arb | 2 ++ app/lib/l10n/app_uk.arb | 2 ++ app/lib/l10n/app_ur.arb | 2 ++ app/lib/l10n/app_vi.arb | 2 ++ app/lib/l10n/app_zh.arb | 2 ++ 49 files changed, 104 insertions(+) diff --git a/app/lib/l10n/app_ar.arb b/app/lib/l10n/app_ar.arb index e46bada5d8..200c19fd11 100644 --- a/app/lib/l10n/app_ar.arb +++ b/app/lib/l10n/app_ar.arb @@ -18,6 +18,8 @@ "clear": "مسح", "copyTranscript": "نسخ النص", "copySummary": "نسخ الملخص", + "copyConversationId": "نسخ معرّف المحادثة", + "conversationIdCopied": "تم نسخ معرّف المحادثة إلى الحافظة", "testPrompt": "اختبار الأمر", "reprocessConversation": "إعادة معالجة المحادثة", "deleteConversation": "حذف المحادثة", diff --git a/app/lib/l10n/app_be.arb b/app/lib/l10n/app_be.arb index 6ed88a7fd7..509f024a27 100644 --- a/app/lib/l10n/app_be.arb +++ b/app/lib/l10n/app_be.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Скапіяваць рэзюмэ", + "copyConversationId": "Скапіраваць ID размовы", + "conversationIdCopied": "ID размовы скапіраваны ў буфер абмену", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_bg.arb b/app/lib/l10n/app_bg.arb index 67db5c9d60..af45112b1c 100644 --- a/app/lib/l10n/app_bg.arb +++ b/app/lib/l10n/app_bg.arb @@ -18,6 +18,8 @@ "clear": "Изчисти", "copyTranscript": "Копирай стенограма", "copySummary": "Копирай обобщение", + "copyConversationId": "Копиране на ID на разговора", + "conversationIdCopied": "ID на разговора е копирано в клипборда", "testPrompt": "Тествай подсказка", "reprocessConversation": "Преработи разговор", "deleteConversation": "Изтриване на разговор", diff --git a/app/lib/l10n/app_bn.arb b/app/lib/l10n/app_bn.arb index 793dd87f1a..0afe3e0626 100644 --- a/app/lib/l10n/app_bn.arb +++ b/app/lib/l10n/app_bn.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "সারসংক্ষেপ কপি করুন", + "copyConversationId": "কথোপকথন আইডি কপি করুন", + "conversationIdCopied": "কথোপকথন আইডি ক্লিপবোর্ডে কপি হয়েছে", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_bs.arb b/app/lib/l10n/app_bs.arb index b93442dbac..298628d822 100644 --- a/app/lib/l10n/app_bs.arb +++ b/app/lib/l10n/app_bs.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Kopiraj sažetak", + "copyConversationId": "Kopiraj ID razgovora", + "conversationIdCopied": "ID razgovora kopiran u međuspremnik", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_ca.arb b/app/lib/l10n/app_ca.arb index fc9fb22c10..8973be898b 100644 --- a/app/lib/l10n/app_ca.arb +++ b/app/lib/l10n/app_ca.arb @@ -18,6 +18,8 @@ "clear": "Neteja", "copyTranscript": "Copiar transcripció", "copySummary": "Copiar resum", + "copyConversationId": "Copia l'ID de la conversa", + "conversationIdCopied": "ID de la conversa copiat al porta-retalls", "testPrompt": "Provar indicació", "reprocessConversation": "Reprocessar conversa", "deleteConversation": "Suprimir conversa", diff --git a/app/lib/l10n/app_cs.arb b/app/lib/l10n/app_cs.arb index 352f3159ec..d1a88e102c 100644 --- a/app/lib/l10n/app_cs.arb +++ b/app/lib/l10n/app_cs.arb @@ -18,6 +18,8 @@ "clear": "Vymazat", "copyTranscript": "Kopírovat přepis", "copySummary": "Kopírovat shrnutí", + "copyConversationId": "Kopírovat ID konverzace", + "conversationIdCopied": "ID konverzace zkopírováno do schránky", "testPrompt": "Testovat výzvu", "reprocessConversation": "Znovu zpracovat konverzaci", "deleteConversation": "Smazat konverzaci", diff --git a/app/lib/l10n/app_da.arb b/app/lib/l10n/app_da.arb index f2ce0f6ba8..7ac61f1ece 100644 --- a/app/lib/l10n/app_da.arb +++ b/app/lib/l10n/app_da.arb @@ -18,6 +18,8 @@ "clear": "Ryd", "copyTranscript": "Kopier transskription", "copySummary": "Kopier opsummering", + "copyConversationId": "Kopiér samtale-ID", + "conversationIdCopied": "Samtale-ID kopieret til udklipsholder", "testPrompt": "Test prompt", "reprocessConversation": "Genbehandl samtale", "deleteConversation": "Slet samtale", diff --git a/app/lib/l10n/app_de.arb b/app/lib/l10n/app_de.arb index 8ad0f656e4..80dd132b54 100644 --- a/app/lib/l10n/app_de.arb +++ b/app/lib/l10n/app_de.arb @@ -18,6 +18,8 @@ "clear": "Löschen", "copyTranscript": "Transkript kopieren", "copySummary": "Zusammenfassung kopieren", + "copyConversationId": "Konversations-ID kopieren", + "conversationIdCopied": "Konversations-ID in Zwischenablage kopiert", "testPrompt": "Prompt testen", "reprocessConversation": "Unterhaltung neu verarbeiten", "deleteConversation": "Gespräch löschen", diff --git a/app/lib/l10n/app_el.arb b/app/lib/l10n/app_el.arb index 7d825979bc..8b1563073c 100644 --- a/app/lib/l10n/app_el.arb +++ b/app/lib/l10n/app_el.arb @@ -18,6 +18,8 @@ "clear": "Εκκαθάριση", "copyTranscript": "Αντιγραφή απομαγνητοφώνησης", "copySummary": "Αντιγραφή σύνοψης", + "copyConversationId": "Αντιγραφή ID συνομιλίας", + "conversationIdCopied": "Το ID συνομιλίας αντιγράφηκε στο πρόχειρο", "testPrompt": "Δοκιμή Εντολής", "reprocessConversation": "Επανεπεξεργασία Συνομιλίας", "deleteConversation": "Διαγραφή συνομιλίας", diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index 622ddfb49f..f077a63337 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -73,6 +73,14 @@ "@copySummary": { "description": "Option to copy summary to clipboard" }, + "copyConversationId": "Copy Conversation ID", + "@copyConversationId": { + "description": "Menu item to copy conversation ID to clipboard" + }, + "conversationIdCopied": "Conversation ID copied to clipboard", + "@conversationIdCopied": { + "description": "Snackbar message when conversation ID is copied" + }, "testPrompt": "Test Prompt", "@testPrompt": { "description": "Menu item for testing prompts" diff --git a/app/lib/l10n/app_es.arb b/app/lib/l10n/app_es.arb index a1b383e72a..f4613078b6 100644 --- a/app/lib/l10n/app_es.arb +++ b/app/lib/l10n/app_es.arb @@ -18,6 +18,8 @@ "clear": "Limpiar", "copyTranscript": "Copiar transcripción", "copySummary": "Copiar resumen", + "copyConversationId": "Copiar ID de conversación", + "conversationIdCopied": "ID de conversación copiado al portapapeles", "testPrompt": "Probar prompt", "reprocessConversation": "Reprocesar conversación", "deleteConversation": "Eliminar conversación", diff --git a/app/lib/l10n/app_et.arb b/app/lib/l10n/app_et.arb index 0ce7d6b2ce..567efda4a2 100644 --- a/app/lib/l10n/app_et.arb +++ b/app/lib/l10n/app_et.arb @@ -18,6 +18,8 @@ "clear": "Tühjenda", "copyTranscript": "Kopeeri transkriptsioon", "copySummary": "Kopeeri kokkuvõte", + "copyConversationId": "Kopeeri vestluse ID", + "conversationIdCopied": "Vestluse ID kopeeriti lõikelauale", "testPrompt": "Testi käsku", "reprocessConversation": "Töötle vestlust uuesti", "deleteConversation": "Kustuta vestlus", diff --git a/app/lib/l10n/app_fa.arb b/app/lib/l10n/app_fa.arb index 0872108f8f..0c60e7a64c 100644 --- a/app/lib/l10n/app_fa.arb +++ b/app/lib/l10n/app_fa.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "کپی خلاصه", + "copyConversationId": "کپی شناسه مکالمه", + "conversationIdCopied": "شناسه مکالمه در کلیپ‌بورد کپی شد", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_fi.arb b/app/lib/l10n/app_fi.arb index b723f8c718..06d4aeb70c 100644 --- a/app/lib/l10n/app_fi.arb +++ b/app/lib/l10n/app_fi.arb @@ -18,6 +18,8 @@ "clear": "Tyhjennä", "copyTranscript": "Kopioi litterointi", "copySummary": "Kopioi tiivistelmä", + "copyConversationId": "Kopioi keskustelun tunnus", + "conversationIdCopied": "Keskustelun tunnus kopioitu leikepöydälle", "testPrompt": "Testaa kehotetta", "reprocessConversation": "Käsittele keskustelu uudelleen", "deleteConversation": "Poista keskustelu", diff --git a/app/lib/l10n/app_fr.arb b/app/lib/l10n/app_fr.arb index 3888cca2c3..e92f879828 100644 --- a/app/lib/l10n/app_fr.arb +++ b/app/lib/l10n/app_fr.arb @@ -18,6 +18,8 @@ "clear": "Effacer", "copyTranscript": "Copier la transcription", "copySummary": "Copier le résumé", + "copyConversationId": "Copier l'ID de la conversation", + "conversationIdCopied": "ID de la conversation copié dans le presse-papiers", "testPrompt": "Tester le prompt", "reprocessConversation": "Retraiter la conversation", "deleteConversation": "Supprimer la conversation", diff --git a/app/lib/l10n/app_he.arb b/app/lib/l10n/app_he.arb index 6c8b383eea..abe04d6ca7 100644 --- a/app/lib/l10n/app_he.arb +++ b/app/lib/l10n/app_he.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "העתק סיכום", + "copyConversationId": "העתק מזהה שיחה", + "conversationIdCopied": "מזהה השיחה הועתק ללוח", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_hi.arb b/app/lib/l10n/app_hi.arb index 77e135121c..c5b50defe7 100644 --- a/app/lib/l10n/app_hi.arb +++ b/app/lib/l10n/app_hi.arb @@ -18,6 +18,8 @@ "clear": "साफ़ करें", "copyTranscript": "प्रतिलिपि कॉपी करें", "copySummary": "सारांश कॉपी करें", + "copyConversationId": "बातचीत ID कॉपी करें", + "conversationIdCopied": "बातचीत ID क्लिपबोर्ड पर कॉपी हो गई", "testPrompt": "टेस्ट प्रॉम्प्ट", "reprocessConversation": "बातचीत को पुनः संसाधित करें", "deleteConversation": "बातचीत हटाएं", diff --git a/app/lib/l10n/app_hr.arb b/app/lib/l10n/app_hr.arb index f8268ab274..5bf47c2658 100644 --- a/app/lib/l10n/app_hr.arb +++ b/app/lib/l10n/app_hr.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Kopiraj sažetak", + "copyConversationId": "Kopiraj ID razgovora", + "conversationIdCopied": "ID razgovora kopiran u međuspremnik", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_hu.arb b/app/lib/l10n/app_hu.arb index 4265f62586..7b37c50ec7 100644 --- a/app/lib/l10n/app_hu.arb +++ b/app/lib/l10n/app_hu.arb @@ -18,6 +18,8 @@ "clear": "Törlés", "copyTranscript": "Átirat másolása", "copySummary": "Összefoglaló másolása", + "copyConversationId": "Társalgás azonosítójának másolása", + "conversationIdCopied": "A társalgás azonosítója vágólapra másolva", "testPrompt": "Prompt tesztelése", "reprocessConversation": "Beszélgetés újrafeldolgozása", "deleteConversation": "Beszélgetés törlése", diff --git a/app/lib/l10n/app_id.arb b/app/lib/l10n/app_id.arb index d7d17af111..b86606d465 100644 --- a/app/lib/l10n/app_id.arb +++ b/app/lib/l10n/app_id.arb @@ -18,6 +18,8 @@ "clear": "Bersihkan", "copyTranscript": "Salin transkrip", "copySummary": "Salin ringkasan", + "copyConversationId": "Salin ID percakapan", + "conversationIdCopied": "ID percakapan disalin ke papan klip", "testPrompt": "Uji Prompt", "reprocessConversation": "Proses Ulang Percakapan", "deleteConversation": "Hapus Percakapan", diff --git a/app/lib/l10n/app_it.arb b/app/lib/l10n/app_it.arb index 3c2cca1b62..1bb3c34407 100644 --- a/app/lib/l10n/app_it.arb +++ b/app/lib/l10n/app_it.arb @@ -18,6 +18,8 @@ "clear": "Cancella", "copyTranscript": "Copia trascrizione", "copySummary": "Copia riepilogo", + "copyConversationId": "Copia ID conversazione", + "conversationIdCopied": "ID conversazione copiato negli appunti", "testPrompt": "Prova Prompt", "reprocessConversation": "Rielabora Conversazione", "deleteConversation": "Elimina conversazione", diff --git a/app/lib/l10n/app_ja.arb b/app/lib/l10n/app_ja.arb index 063cf320a7..ad22a22bf8 100644 --- a/app/lib/l10n/app_ja.arb +++ b/app/lib/l10n/app_ja.arb @@ -17,6 +17,8 @@ "close": "閉じる", "copyTranscript": "文字起こしをコピー", "copySummary": "要約をコピー", + "copyConversationId": "会話IDをコピー", + "conversationIdCopied": "会話IDをクリップボードにコピーしました", "testPrompt": "プロンプトをテスト", "reprocessConversation": "会話を再処理", "deleteConversation": "会話を削除", diff --git a/app/lib/l10n/app_kn.arb b/app/lib/l10n/app_kn.arb index c24b9b7354..dbe5bffb08 100644 --- a/app/lib/l10n/app_kn.arb +++ b/app/lib/l10n/app_kn.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "ಸಾರಾಂಶ ನಕಲಿ ಮಾಡಿ", + "copyConversationId": "ಸಂಭಾಷಣೆ ID ನಕಲಿಸಿ", + "conversationIdCopied": "ಸಂಭಾಷಣೆ ID ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_ko.arb b/app/lib/l10n/app_ko.arb index a9bf4e54d6..77a0592b8c 100644 --- a/app/lib/l10n/app_ko.arb +++ b/app/lib/l10n/app_ko.arb @@ -18,6 +18,8 @@ "clear": "지우기", "copyTranscript": "스크립트 복사", "copySummary": "요약 복사", + "copyConversationId": "대화 ID 복사", + "conversationIdCopied": "대화 ID가 클립보드에 복사되었습니다", "testPrompt": "프롬프트 테스트", "reprocessConversation": "대화 재처리", "deleteConversation": "대화 삭제", diff --git a/app/lib/l10n/app_lt.arb b/app/lib/l10n/app_lt.arb index d964a0a6cf..a7e5ca0dc1 100644 --- a/app/lib/l10n/app_lt.arb +++ b/app/lib/l10n/app_lt.arb @@ -533,6 +533,8 @@ "copyKey": "Kopijuoti raktą", "copyLink": "Kopijuoti nuorodą", "copySummary": "Kopijuoti santrauką", + "copyConversationId": "Kopijuoti pokalbio ID", + "conversationIdCopied": "Pokalbio ID nukopijuotas į mainų sritį", "copyToClipboard": "Kopijuoti į iškarpinę", "copyTranscript": "Kopijuoti transkripciją", "copyUrl": "Kopijuoti URL", diff --git a/app/lib/l10n/app_lv.arb b/app/lib/l10n/app_lv.arb index d09e955f85..7bd4a495de 100644 --- a/app/lib/l10n/app_lv.arb +++ b/app/lib/l10n/app_lv.arb @@ -18,6 +18,8 @@ "clear": "Notīrīt", "copyTranscript": "Kopēt transkripciju", "copySummary": "Kopēt kopsavilkumu", + "copyConversationId": "Kopēt sarakstes ID", + "conversationIdCopied": "Sarakstes ID nokopēts starpliktuvē", "testPrompt": "Testēt uzvedni", "reprocessConversation": "Pārstrādāt sarunu", "deleteConversation": "Dzēst sarunu", diff --git a/app/lib/l10n/app_mk.arb b/app/lib/l10n/app_mk.arb index 0e4721c75b..9bc46e6cda 100644 --- a/app/lib/l10n/app_mk.arb +++ b/app/lib/l10n/app_mk.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Копирај резиме", + "copyConversationId": "Копирај ID на разговорот", + "conversationIdCopied": "ID на разговорот е копиран во клипборд", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_mr.arb b/app/lib/l10n/app_mr.arb index 5d1b5efe1f..484dc30feb 100644 --- a/app/lib/l10n/app_mr.arb +++ b/app/lib/l10n/app_mr.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "सारांश कॉपी करा", + "copyConversationId": "संभाषण आयडी कॉपी करा", + "conversationIdCopied": "संभाषण आयडी क्लिपबोर्डवर कॉपी झाला", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_ms.arb b/app/lib/l10n/app_ms.arb index 13e3b552a2..14b656a5d3 100644 --- a/app/lib/l10n/app_ms.arb +++ b/app/lib/l10n/app_ms.arb @@ -18,6 +18,8 @@ "clear": "Kosongkan", "copyTranscript": "Salin transkrip", "copySummary": "Salin ringkasan", + "copyConversationId": "Salin ID perbualan", + "conversationIdCopied": "ID perbualan disalin ke papan klip", "testPrompt": "Uji Gesaan", "reprocessConversation": "Proses Semula Perbualan", "deleteConversation": "Padam Perbualan", diff --git a/app/lib/l10n/app_nl.arb b/app/lib/l10n/app_nl.arb index 3984aa4ccd..c905ee1fe5 100644 --- a/app/lib/l10n/app_nl.arb +++ b/app/lib/l10n/app_nl.arb @@ -18,6 +18,8 @@ "clear": "Wissen", "copyTranscript": "Kopieer transcript", "copySummary": "Kopieer samenvatting", + "copyConversationId": "Gesprek-ID kopiëren", + "conversationIdCopied": "Gesprek-ID gekopieerd naar klembord", "testPrompt": "Prompt testen", "reprocessConversation": "Gesprek opnieuw verwerken", "deleteConversation": "Gesprek verwijderen", diff --git a/app/lib/l10n/app_no.arb b/app/lib/l10n/app_no.arb index b75b2a0a9b..3c06d779e3 100644 --- a/app/lib/l10n/app_no.arb +++ b/app/lib/l10n/app_no.arb @@ -18,6 +18,8 @@ "clear": "Tøm", "copyTranscript": "Kopier transkripsjon", "copySummary": "Kopier oppsummering", + "copyConversationId": "Kopier samtale-ID", + "conversationIdCopied": "Samtale-ID kopiert til utklippstavle", "testPrompt": "Test prompt", "reprocessConversation": "Behandle samtale på nytt", "deleteConversation": "Slett samtale", diff --git a/app/lib/l10n/app_pl.arb b/app/lib/l10n/app_pl.arb index 7b00f537be..9e912f2a0b 100644 --- a/app/lib/l10n/app_pl.arb +++ b/app/lib/l10n/app_pl.arb @@ -18,6 +18,8 @@ "clear": "Wyczyść", "copyTranscript": "Kopiuj transkrypcję", "copySummary": "Kopiuj podsumowanie", + "copyConversationId": "Kopiuj ID rozmowy", + "conversationIdCopied": "ID rozmowy skopiowane do schowka", "testPrompt": "Testuj prompt", "reprocessConversation": "Przetwórz ponownie rozmowę", "deleteConversation": "Usuń rozmowę", diff --git a/app/lib/l10n/app_pt.arb b/app/lib/l10n/app_pt.arb index 5b70157716..c567a93395 100644 --- a/app/lib/l10n/app_pt.arb +++ b/app/lib/l10n/app_pt.arb @@ -18,6 +18,8 @@ "clear": "Limpar", "copyTranscript": "Copiar transcrição", "copySummary": "Copiar resumo", + "copyConversationId": "Copiar ID da conversa", + "conversationIdCopied": "ID da conversa copiado para a área de transferência", "testPrompt": "Testar prompt", "reprocessConversation": "Reprocessar conversa", "deleteConversation": "Excluir Conversa", diff --git a/app/lib/l10n/app_ro.arb b/app/lib/l10n/app_ro.arb index 742e216ffb..a5fca824e7 100644 --- a/app/lib/l10n/app_ro.arb +++ b/app/lib/l10n/app_ro.arb @@ -18,6 +18,8 @@ "clear": "Curăță", "copyTranscript": "Copiază transcrierea", "copySummary": "Copiază rezumatul", + "copyConversationId": "Copiază ID-ul conversației", + "conversationIdCopied": "ID-ul conversației a fost copiat în clipboard", "testPrompt": "Testează promptul", "reprocessConversation": "Reprocesează conversația", "deleteConversation": "Șterge conversația", diff --git a/app/lib/l10n/app_ru.arb b/app/lib/l10n/app_ru.arb index 4afa0cd7e3..f2f6ebe720 100644 --- a/app/lib/l10n/app_ru.arb +++ b/app/lib/l10n/app_ru.arb @@ -18,6 +18,8 @@ "clear": "Очистить", "copyTranscript": "Копировать транскрипт", "copySummary": "Копировать сводку", + "copyConversationId": "Скопировать ID разговора", + "conversationIdCopied": "ID разговора скопирован в буфер обмена", "testPrompt": "Тестовый запрос", "reprocessConversation": "Переобработать разговор", "deleteConversation": "Удалить разговор", diff --git a/app/lib/l10n/app_sk.arb b/app/lib/l10n/app_sk.arb index 5981e93d47..803484443f 100644 --- a/app/lib/l10n/app_sk.arb +++ b/app/lib/l10n/app_sk.arb @@ -18,6 +18,8 @@ "clear": "Vymazať", "copyTranscript": "Kopírovať prepis", "copySummary": "Kopírovať zhrnutie", + "copyConversationId": "Kopírovať ID konverzácie", + "conversationIdCopied": "ID konverzácie skopírované do schránky", "testPrompt": "Otestovať výzvu", "reprocessConversation": "Znovu spracovať konverzáciu", "deleteConversation": "Odstrániť konverzáciu", diff --git a/app/lib/l10n/app_sl.arb b/app/lib/l10n/app_sl.arb index b088f8adfd..f1518ca790 100644 --- a/app/lib/l10n/app_sl.arb +++ b/app/lib/l10n/app_sl.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Kopiraj povzetek", + "copyConversationId": "Kopiraj ID pogovora", + "conversationIdCopied": "ID pogovora je bil kopiran v odložišče", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_sr.arb b/app/lib/l10n/app_sr.arb index fd5647a979..26101a868f 100644 --- a/app/lib/l10n/app_sr.arb +++ b/app/lib/l10n/app_sr.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Копирај садржај", + "copyConversationId": "Копирај ID разговора", + "conversationIdCopied": "ID разговора је копиран у клипборд", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_sv.arb b/app/lib/l10n/app_sv.arb index 8bbc8ddf56..fa9f07082e 100644 --- a/app/lib/l10n/app_sv.arb +++ b/app/lib/l10n/app_sv.arb @@ -18,6 +18,8 @@ "clear": "Rensa", "copyTranscript": "Kopiera transkription", "copySummary": "Kopiera sammanfattning", + "copyConversationId": "Kopiera konversations-ID", + "conversationIdCopied": "Konversations-ID kopierat till urklipp", "testPrompt": "Testa prompt", "reprocessConversation": "Bearbeta konversation igen", "deleteConversation": "Radera konversation", diff --git a/app/lib/l10n/app_ta.arb b/app/lib/l10n/app_ta.arb index fedf68ae3a..9da49f80e9 100644 --- a/app/lib/l10n/app_ta.arb +++ b/app/lib/l10n/app_ta.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "சாரம் நகலெடுக்கவும்", + "copyConversationId": "உரையாடல் ID நகலெடு", + "conversationIdCopied": "உரையாடல் ID கிளிப்போர்டில் நகலெடுக்கப்பட்டது", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_te.arb b/app/lib/l10n/app_te.arb index eb478b002d..843b54e10c 100644 --- a/app/lib/l10n/app_te.arb +++ b/app/lib/l10n/app_te.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "సారాంశాన్ని కాపీ చేయండి", + "copyConversationId": "సంభాషణ ID కాపీ చేయండి", + "conversationIdCopied": "సంభాషణ ID క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_th.arb b/app/lib/l10n/app_th.arb index b96391aee2..7335a544a1 100644 --- a/app/lib/l10n/app_th.arb +++ b/app/lib/l10n/app_th.arb @@ -18,6 +18,8 @@ "clear": "ล้าง", "copyTranscript": "คัดลอกบทถอดความ", "copySummary": "คัดลอกสรุป", + "copyConversationId": "คัดลอก ID การสนทนา", + "conversationIdCopied": "คัดลอก ID การสนทนาไปยังคลิปบอร์ดแล้ว", "testPrompt": "ทดสอบคำสั่ง", "reprocessConversation": "ประมวลผลบทสนทนาใหม่", "deleteConversation": "ลบการสนทนา", diff --git a/app/lib/l10n/app_tl.arb b/app/lib/l10n/app_tl.arb index c4d78f803f..4fb333267d 100644 --- a/app/lib/l10n/app_tl.arb +++ b/app/lib/l10n/app_tl.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "Kopyahin ang Buod", + "copyConversationId": "Kopyahin ang ID ng usapan", + "conversationIdCopied": "Nakopya na ang ID ng usapan sa clipboard", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_tr.arb b/app/lib/l10n/app_tr.arb index 3596658756..b227889bcd 100644 --- a/app/lib/l10n/app_tr.arb +++ b/app/lib/l10n/app_tr.arb @@ -18,6 +18,8 @@ "clear": "Temizle", "copyTranscript": "Transkripti kopyala", "copySummary": "Özeti kopyala", + "copyConversationId": "Konuşma kimliğini kopyala", + "conversationIdCopied": "Konuşma kimliği panoya kopyalandı", "testPrompt": "İstemi Test Et", "reprocessConversation": "Konuşmayı Yeniden İşle", "deleteConversation": "Sohbeti Sil", diff --git a/app/lib/l10n/app_uk.arb b/app/lib/l10n/app_uk.arb index f508845861..118f73f44b 100644 --- a/app/lib/l10n/app_uk.arb +++ b/app/lib/l10n/app_uk.arb @@ -18,6 +18,8 @@ "clear": "Очистити", "copyTranscript": "Копіювати транскрипт", "copySummary": "Копіювати підсумок", + "copyConversationId": "Копіювати ID розмови", + "conversationIdCopied": "ID розмови скопійовано в буфер обміну", "testPrompt": "Тестовий запит", "reprocessConversation": "Перепрацювати розмову", "deleteConversation": "Видалити розмову", diff --git a/app/lib/l10n/app_ur.arb b/app/lib/l10n/app_ur.arb index c205d8f79c..f9ee690ec3 100644 --- a/app/lib/l10n/app_ur.arb +++ b/app/lib/l10n/app_ur.arb @@ -70,6 +70,8 @@ "description": "Option to copy transcript to clipboard" }, "copySummary": "خلاصہ کاپی کریں", + "copyConversationId": "گفتگو کی ID کاپی کریں", + "conversationIdCopied": "گفتگو کی ID کلپ بورڈ پر کاپی ہو گئی", "@copySummary": { "description": "Option to copy summary to clipboard" }, diff --git a/app/lib/l10n/app_vi.arb b/app/lib/l10n/app_vi.arb index 270bab2dd6..91d5854063 100644 --- a/app/lib/l10n/app_vi.arb +++ b/app/lib/l10n/app_vi.arb @@ -18,6 +18,8 @@ "clear": "Xóa sạch", "copyTranscript": "Sao chép bản ghi", "copySummary": "Sao chép tóm tắt", + "copyConversationId": "Sao chép ID cuộc trò chuyện", + "conversationIdCopied": "Đã sao chép ID cuộc trò chuyện vào clipboard", "testPrompt": "Thử nghiệm", "reprocessConversation": "Xử lý lại cuộc trò chuyện", "deleteConversation": "Xóa cuộc trò chuyện", diff --git a/app/lib/l10n/app_zh.arb b/app/lib/l10n/app_zh.arb index 84b5124600..69d55067ff 100644 --- a/app/lib/l10n/app_zh.arb +++ b/app/lib/l10n/app_zh.arb @@ -18,6 +18,8 @@ "clear": "清除", "copyTranscript": "复制文字记录", "copySummary": "复制摘要", + "copyConversationId": "复制对话 ID", + "conversationIdCopied": "对话 ID 已复制到剪贴板", "testPrompt": "测试提示词", "reprocessConversation": "重新处理对话", "deleteConversation": "删除对话", From 36700842851941bfb5c450f10ca5019f4ab2b8bb Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Fri, 1 May 2026 17:52:22 +0900 Subject: [PATCH 3/8] chore(l10n): regenerate localization Dart files via flutter gen-l10n Regenerated `app/lib/l10n/app_localizations*.dart` to expose the new `copyConversationId` and `conversationIdCopied` getters added in the previous commit. Output of `cd app && flutter gen-l10n`; no manual edits. --- app/lib/l10n/app_localizations.dart | 12 ++++++++++++ app/lib/l10n/app_localizations_ar.dart | 6 ++++++ app/lib/l10n/app_localizations_be.dart | 6 ++++++ app/lib/l10n/app_localizations_bg.dart | 6 ++++++ app/lib/l10n/app_localizations_bn.dart | 6 ++++++ app/lib/l10n/app_localizations_bs.dart | 6 ++++++ app/lib/l10n/app_localizations_ca.dart | 6 ++++++ app/lib/l10n/app_localizations_cs.dart | 6 ++++++ app/lib/l10n/app_localizations_da.dart | 6 ++++++ app/lib/l10n/app_localizations_de.dart | 6 ++++++ app/lib/l10n/app_localizations_el.dart | 6 ++++++ app/lib/l10n/app_localizations_en.dart | 6 ++++++ app/lib/l10n/app_localizations_es.dart | 6 ++++++ app/lib/l10n/app_localizations_et.dart | 6 ++++++ app/lib/l10n/app_localizations_fa.dart | 6 ++++++ app/lib/l10n/app_localizations_fi.dart | 6 ++++++ app/lib/l10n/app_localizations_fr.dart | 6 ++++++ app/lib/l10n/app_localizations_he.dart | 6 ++++++ app/lib/l10n/app_localizations_hi.dart | 6 ++++++ app/lib/l10n/app_localizations_hr.dart | 6 ++++++ app/lib/l10n/app_localizations_hu.dart | 6 ++++++ app/lib/l10n/app_localizations_id.dart | 6 ++++++ app/lib/l10n/app_localizations_it.dart | 6 ++++++ app/lib/l10n/app_localizations_ja.dart | 6 ++++++ app/lib/l10n/app_localizations_kn.dart | 6 ++++++ app/lib/l10n/app_localizations_ko.dart | 6 ++++++ app/lib/l10n/app_localizations_lt.dart | 6 ++++++ app/lib/l10n/app_localizations_lv.dart | 6 ++++++ app/lib/l10n/app_localizations_mk.dart | 6 ++++++ app/lib/l10n/app_localizations_mr.dart | 6 ++++++ app/lib/l10n/app_localizations_ms.dart | 6 ++++++ app/lib/l10n/app_localizations_nl.dart | 6 ++++++ app/lib/l10n/app_localizations_no.dart | 6 ++++++ app/lib/l10n/app_localizations_pl.dart | 6 ++++++ app/lib/l10n/app_localizations_pt.dart | 6 ++++++ app/lib/l10n/app_localizations_ro.dart | 6 ++++++ app/lib/l10n/app_localizations_ru.dart | 6 ++++++ app/lib/l10n/app_localizations_sk.dart | 6 ++++++ app/lib/l10n/app_localizations_sl.dart | 6 ++++++ app/lib/l10n/app_localizations_sr.dart | 6 ++++++ app/lib/l10n/app_localizations_sv.dart | 6 ++++++ app/lib/l10n/app_localizations_ta.dart | 6 ++++++ app/lib/l10n/app_localizations_te.dart | 6 ++++++ app/lib/l10n/app_localizations_th.dart | 6 ++++++ app/lib/l10n/app_localizations_tl.dart | 6 ++++++ app/lib/l10n/app_localizations_tr.dart | 6 ++++++ app/lib/l10n/app_localizations_uk.dart | 6 ++++++ app/lib/l10n/app_localizations_ur.dart | 6 ++++++ app/lib/l10n/app_localizations_vi.dart | 6 ++++++ app/lib/l10n/app_localizations_zh.dart | 6 ++++++ 50 files changed, 306 insertions(+) diff --git a/app/lib/l10n/app_localizations.dart b/app/lib/l10n/app_localizations.dart index 8fe6d81a0a..bc3432cb93 100644 --- a/app/lib/l10n/app_localizations.dart +++ b/app/lib/l10n/app_localizations.dart @@ -297,6 +297,18 @@ abstract class AppLocalizations { /// **'Copy Summary'** String get copySummary; + /// Menu item to copy conversation ID to clipboard + /// + /// In en, this message translates to: + /// **'Copy Conversation ID'** + String get copyConversationId; + + /// Snackbar message when conversation ID is copied + /// + /// In en, this message translates to: + /// **'Conversation ID copied to clipboard'** + String get conversationIdCopied; + /// Menu item for testing prompts /// /// In en, this message translates to: diff --git a/app/lib/l10n/app_localizations_ar.dart b/app/lib/l10n/app_localizations_ar.dart index 83101bfc02..00e3d80770 100644 --- a/app/lib/l10n/app_localizations_ar.dart +++ b/app/lib/l10n/app_localizations_ar.dart @@ -63,6 +63,12 @@ class AppLocalizationsAr extends AppLocalizations { @override String get copySummary => 'نسخ الملخص'; + @override + String get copyConversationId => 'نسخ معرّف المحادثة'; + + @override + String get conversationIdCopied => 'تم نسخ معرّف المحادثة إلى الحافظة'; + @override String get testPrompt => 'اختبار الأمر'; diff --git a/app/lib/l10n/app_localizations_be.dart b/app/lib/l10n/app_localizations_be.dart index ba369161e6..cc0d1c4ccf 100644 --- a/app/lib/l10n/app_localizations_be.dart +++ b/app/lib/l10n/app_localizations_be.dart @@ -63,6 +63,12 @@ class AppLocalizationsBe extends AppLocalizations { @override String get copySummary => 'Скапіяваць рэзюмэ'; + @override + String get copyConversationId => 'Скапіраваць ID размовы'; + + @override + String get conversationIdCopied => 'ID размовы скапіраваны ў буфер абмену'; + @override String get testPrompt => 'Тэставаць запыт'; diff --git a/app/lib/l10n/app_localizations_bg.dart b/app/lib/l10n/app_localizations_bg.dart index 22baf0155f..62ed58b7f3 100644 --- a/app/lib/l10n/app_localizations_bg.dart +++ b/app/lib/l10n/app_localizations_bg.dart @@ -63,6 +63,12 @@ class AppLocalizationsBg extends AppLocalizations { @override String get copySummary => 'Копирай обобщение'; + @override + String get copyConversationId => 'Копиране на ID на разговора'; + + @override + String get conversationIdCopied => 'ID на разговора е копирано в клипборда'; + @override String get testPrompt => 'Тествай подсказка'; diff --git a/app/lib/l10n/app_localizations_bn.dart b/app/lib/l10n/app_localizations_bn.dart index 2216c79be7..0ceccc6dc1 100644 --- a/app/lib/l10n/app_localizations_bn.dart +++ b/app/lib/l10n/app_localizations_bn.dart @@ -63,6 +63,12 @@ class AppLocalizationsBn extends AppLocalizations { @override String get copySummary => 'সারসংক্ষেপ কপি করুন'; + @override + String get copyConversationId => 'কথোপকথন আইডি কপি করুন'; + + @override + String get conversationIdCopied => 'কথোপকথন আইডি ক্লিপবোর্ডে কপি হয়েছে'; + @override String get testPrompt => 'পরীক্ষা প্রম্পট'; diff --git a/app/lib/l10n/app_localizations_bs.dart b/app/lib/l10n/app_localizations_bs.dart index 837258980a..c945e00847 100644 --- a/app/lib/l10n/app_localizations_bs.dart +++ b/app/lib/l10n/app_localizations_bs.dart @@ -63,6 +63,12 @@ class AppLocalizationsBs extends AppLocalizations { @override String get copySummary => 'Kopiraj sažetak'; + @override + String get copyConversationId => 'Kopiraj ID razgovora'; + + @override + String get conversationIdCopied => 'ID razgovora kopiran u međuspremnik'; + @override String get testPrompt => 'Test upit'; diff --git a/app/lib/l10n/app_localizations_ca.dart b/app/lib/l10n/app_localizations_ca.dart index 6494fda616..9e53746704 100644 --- a/app/lib/l10n/app_localizations_ca.dart +++ b/app/lib/l10n/app_localizations_ca.dart @@ -63,6 +63,12 @@ class AppLocalizationsCa extends AppLocalizations { @override String get copySummary => 'Copiar resum'; + @override + String get copyConversationId => 'Copia l\'ID de la conversa'; + + @override + String get conversationIdCopied => 'ID de la conversa copiat al porta-retalls'; + @override String get testPrompt => 'Provar indicació'; diff --git a/app/lib/l10n/app_localizations_cs.dart b/app/lib/l10n/app_localizations_cs.dart index 2a8eea1802..e3f1ce110e 100644 --- a/app/lib/l10n/app_localizations_cs.dart +++ b/app/lib/l10n/app_localizations_cs.dart @@ -63,6 +63,12 @@ class AppLocalizationsCs extends AppLocalizations { @override String get copySummary => 'Kopírovat shrnutí'; + @override + String get copyConversationId => 'Kopírovat ID konverzace'; + + @override + String get conversationIdCopied => 'ID konverzace zkopírováno do schránky'; + @override String get testPrompt => 'Testovat výzvu'; diff --git a/app/lib/l10n/app_localizations_da.dart b/app/lib/l10n/app_localizations_da.dart index c3e6f4b636..db097e3bb3 100644 --- a/app/lib/l10n/app_localizations_da.dart +++ b/app/lib/l10n/app_localizations_da.dart @@ -63,6 +63,12 @@ class AppLocalizationsDa extends AppLocalizations { @override String get copySummary => 'Kopier opsummering'; + @override + String get copyConversationId => 'Kopiér samtale-ID'; + + @override + String get conversationIdCopied => 'Samtale-ID kopieret til udklipsholder'; + @override String get testPrompt => 'Test prompt'; diff --git a/app/lib/l10n/app_localizations_de.dart b/app/lib/l10n/app_localizations_de.dart index 445409bc79..b81a63ced3 100644 --- a/app/lib/l10n/app_localizations_de.dart +++ b/app/lib/l10n/app_localizations_de.dart @@ -63,6 +63,12 @@ class AppLocalizationsDe extends AppLocalizations { @override String get copySummary => 'Zusammenfassung kopieren'; + @override + String get copyConversationId => 'Konversations-ID kopieren'; + + @override + String get conversationIdCopied => 'Konversations-ID in Zwischenablage kopiert'; + @override String get testPrompt => 'Prompt testen'; diff --git a/app/lib/l10n/app_localizations_el.dart b/app/lib/l10n/app_localizations_el.dart index 4b5a77919f..39d7b65606 100644 --- a/app/lib/l10n/app_localizations_el.dart +++ b/app/lib/l10n/app_localizations_el.dart @@ -63,6 +63,12 @@ class AppLocalizationsEl extends AppLocalizations { @override String get copySummary => 'Αντιγραφή σύνοψης'; + @override + String get copyConversationId => 'Αντιγραφή ID συνομιλίας'; + + @override + String get conversationIdCopied => 'Το ID συνομιλίας αντιγράφηκε στο πρόχειρο'; + @override String get testPrompt => 'Δοκιμή Εντολής'; diff --git a/app/lib/l10n/app_localizations_en.dart b/app/lib/l10n/app_localizations_en.dart index c160ace822..0a42e961b4 100644 --- a/app/lib/l10n/app_localizations_en.dart +++ b/app/lib/l10n/app_localizations_en.dart @@ -63,6 +63,12 @@ class AppLocalizationsEn extends AppLocalizations { @override String get copySummary => 'Copy Summary'; + @override + String get copyConversationId => 'Copy Conversation ID'; + + @override + String get conversationIdCopied => 'Conversation ID copied to clipboard'; + @override String get testPrompt => 'Test Prompt'; diff --git a/app/lib/l10n/app_localizations_es.dart b/app/lib/l10n/app_localizations_es.dart index aa2132776a..94322c14ca 100644 --- a/app/lib/l10n/app_localizations_es.dart +++ b/app/lib/l10n/app_localizations_es.dart @@ -63,6 +63,12 @@ class AppLocalizationsEs extends AppLocalizations { @override String get copySummary => 'Copiar resumen'; + @override + String get copyConversationId => 'Copiar ID de conversación'; + + @override + String get conversationIdCopied => 'ID de conversación copiado al portapapeles'; + @override String get testPrompt => 'Probar prompt'; diff --git a/app/lib/l10n/app_localizations_et.dart b/app/lib/l10n/app_localizations_et.dart index 30db334a69..c74269f300 100644 --- a/app/lib/l10n/app_localizations_et.dart +++ b/app/lib/l10n/app_localizations_et.dart @@ -63,6 +63,12 @@ class AppLocalizationsEt extends AppLocalizations { @override String get copySummary => 'Kopeeri kokkuvõte'; + @override + String get copyConversationId => 'Kopeeri vestluse ID'; + + @override + String get conversationIdCopied => 'Vestluse ID kopeeriti lõikelauale'; + @override String get testPrompt => 'Testi käsku'; diff --git a/app/lib/l10n/app_localizations_fa.dart b/app/lib/l10n/app_localizations_fa.dart index a4aa575063..d70e1fe7ec 100644 --- a/app/lib/l10n/app_localizations_fa.dart +++ b/app/lib/l10n/app_localizations_fa.dart @@ -63,6 +63,12 @@ class AppLocalizationsFa extends AppLocalizations { @override String get copySummary => 'کپی خلاصه'; + @override + String get copyConversationId => 'کپی شناسه مکالمه'; + + @override + String get conversationIdCopied => 'شناسه مکالمه در کلیپ‌بورد کپی شد'; + @override String get testPrompt => 'تست موضوع'; diff --git a/app/lib/l10n/app_localizations_fi.dart b/app/lib/l10n/app_localizations_fi.dart index 3b48744fbf..1a5b7c6616 100644 --- a/app/lib/l10n/app_localizations_fi.dart +++ b/app/lib/l10n/app_localizations_fi.dart @@ -63,6 +63,12 @@ class AppLocalizationsFi extends AppLocalizations { @override String get copySummary => 'Kopioi tiivistelmä'; + @override + String get copyConversationId => 'Kopioi keskustelun tunnus'; + + @override + String get conversationIdCopied => 'Keskustelun tunnus kopioitu leikepöydälle'; + @override String get testPrompt => 'Testaa kehotetta'; diff --git a/app/lib/l10n/app_localizations_fr.dart b/app/lib/l10n/app_localizations_fr.dart index 01fa190ba3..33ed00685e 100644 --- a/app/lib/l10n/app_localizations_fr.dart +++ b/app/lib/l10n/app_localizations_fr.dart @@ -63,6 +63,12 @@ class AppLocalizationsFr extends AppLocalizations { @override String get copySummary => 'Copier le résumé'; + @override + String get copyConversationId => 'Copier l\'ID de la conversation'; + + @override + String get conversationIdCopied => 'ID de la conversation copié dans le presse-papiers'; + @override String get testPrompt => 'Tester le prompt'; diff --git a/app/lib/l10n/app_localizations_he.dart b/app/lib/l10n/app_localizations_he.dart index fd64d8e6ba..7786b5d95d 100644 --- a/app/lib/l10n/app_localizations_he.dart +++ b/app/lib/l10n/app_localizations_he.dart @@ -63,6 +63,12 @@ class AppLocalizationsHe extends AppLocalizations { @override String get copySummary => 'העתק סיכום'; + @override + String get copyConversationId => 'העתק מזהה שיחה'; + + @override + String get conversationIdCopied => 'מזהה השיחה הועתק ללוח'; + @override String get testPrompt => 'בדוק הנושא'; diff --git a/app/lib/l10n/app_localizations_hi.dart b/app/lib/l10n/app_localizations_hi.dart index ad618307ef..3a9dc4d628 100644 --- a/app/lib/l10n/app_localizations_hi.dart +++ b/app/lib/l10n/app_localizations_hi.dart @@ -63,6 +63,12 @@ class AppLocalizationsHi extends AppLocalizations { @override String get copySummary => 'सारांश कॉपी करें'; + @override + String get copyConversationId => 'बातचीत ID कॉपी करें'; + + @override + String get conversationIdCopied => 'बातचीत ID क्लिपबोर्ड पर कॉपी हो गई'; + @override String get testPrompt => 'टेस्ट प्रॉम्प्ट'; diff --git a/app/lib/l10n/app_localizations_hr.dart b/app/lib/l10n/app_localizations_hr.dart index 869248f89c..b511ae90e3 100644 --- a/app/lib/l10n/app_localizations_hr.dart +++ b/app/lib/l10n/app_localizations_hr.dart @@ -63,6 +63,12 @@ class AppLocalizationsHr extends AppLocalizations { @override String get copySummary => 'Kopiraj sažetak'; + @override + String get copyConversationId => 'Kopiraj ID razgovora'; + + @override + String get conversationIdCopied => 'ID razgovora kopiran u međuspremnik'; + @override String get testPrompt => 'Testiraj upit'; diff --git a/app/lib/l10n/app_localizations_hu.dart b/app/lib/l10n/app_localizations_hu.dart index ccfe6d16ed..b880054c59 100644 --- a/app/lib/l10n/app_localizations_hu.dart +++ b/app/lib/l10n/app_localizations_hu.dart @@ -63,6 +63,12 @@ class AppLocalizationsHu extends AppLocalizations { @override String get copySummary => 'Összefoglaló másolása'; + @override + String get copyConversationId => 'Társalgás azonosítójának másolása'; + + @override + String get conversationIdCopied => 'A társalgás azonosítója vágólapra másolva'; + @override String get testPrompt => 'Prompt tesztelése'; diff --git a/app/lib/l10n/app_localizations_id.dart b/app/lib/l10n/app_localizations_id.dart index 9996675f24..f737eb86c2 100644 --- a/app/lib/l10n/app_localizations_id.dart +++ b/app/lib/l10n/app_localizations_id.dart @@ -63,6 +63,12 @@ class AppLocalizationsId extends AppLocalizations { @override String get copySummary => 'Salin ringkasan'; + @override + String get copyConversationId => 'Salin ID percakapan'; + + @override + String get conversationIdCopied => 'ID percakapan disalin ke papan klip'; + @override String get testPrompt => 'Uji Prompt'; diff --git a/app/lib/l10n/app_localizations_it.dart b/app/lib/l10n/app_localizations_it.dart index 5dd5262fea..3aaba78d02 100644 --- a/app/lib/l10n/app_localizations_it.dart +++ b/app/lib/l10n/app_localizations_it.dart @@ -63,6 +63,12 @@ class AppLocalizationsIt extends AppLocalizations { @override String get copySummary => 'Copia riepilogo'; + @override + String get copyConversationId => 'Copia ID conversazione'; + + @override + String get conversationIdCopied => 'ID conversazione copiato negli appunti'; + @override String get testPrompt => 'Prova Prompt'; diff --git a/app/lib/l10n/app_localizations_ja.dart b/app/lib/l10n/app_localizations_ja.dart index 5c28eb764b..9c26f0f83b 100644 --- a/app/lib/l10n/app_localizations_ja.dart +++ b/app/lib/l10n/app_localizations_ja.dart @@ -62,6 +62,12 @@ class AppLocalizationsJa extends AppLocalizations { @override String get copySummary => '要約をコピー'; + @override + String get copyConversationId => '会話IDをコピー'; + + @override + String get conversationIdCopied => '会話IDをクリップボードにコピーしました'; + @override String get testPrompt => 'プロンプトをテスト'; diff --git a/app/lib/l10n/app_localizations_kn.dart b/app/lib/l10n/app_localizations_kn.dart index 35cd7552dd..fa91063883 100644 --- a/app/lib/l10n/app_localizations_kn.dart +++ b/app/lib/l10n/app_localizations_kn.dart @@ -63,6 +63,12 @@ class AppLocalizationsKn extends AppLocalizations { @override String get copySummary => 'ಸಾರಾಂಶ ನಕಲಿ ಮಾಡಿ'; + @override + String get copyConversationId => 'ಸಂಭಾಷಣೆ ID ನಕಲಿಸಿ'; + + @override + String get conversationIdCopied => 'ಸಂಭಾಷಣೆ ID ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ'; + @override String get testPrompt => 'ಪ್ರಯೋಗ ನಿರ್ದೇಶನ'; diff --git a/app/lib/l10n/app_localizations_ko.dart b/app/lib/l10n/app_localizations_ko.dart index 11472e95e7..1d4015c193 100644 --- a/app/lib/l10n/app_localizations_ko.dart +++ b/app/lib/l10n/app_localizations_ko.dart @@ -62,6 +62,12 @@ class AppLocalizationsKo extends AppLocalizations { @override String get copySummary => '요약 복사'; + @override + String get copyConversationId => '대화 ID 복사'; + + @override + String get conversationIdCopied => '대화 ID가 클립보드에 복사되었습니다'; + @override String get testPrompt => '프롬프트 테스트'; diff --git a/app/lib/l10n/app_localizations_lt.dart b/app/lib/l10n/app_localizations_lt.dart index 87c1cdc20d..131612d542 100644 --- a/app/lib/l10n/app_localizations_lt.dart +++ b/app/lib/l10n/app_localizations_lt.dart @@ -63,6 +63,12 @@ class AppLocalizationsLt extends AppLocalizations { @override String get copySummary => 'Kopijuoti santrauką'; + @override + String get copyConversationId => 'Kopijuoti pokalbio ID'; + + @override + String get conversationIdCopied => 'Pokalbio ID nukopijuotas į mainų sritį'; + @override String get testPrompt => 'Testuoti užklausą'; diff --git a/app/lib/l10n/app_localizations_lv.dart b/app/lib/l10n/app_localizations_lv.dart index 457b07c7e9..c9e0c9ad48 100644 --- a/app/lib/l10n/app_localizations_lv.dart +++ b/app/lib/l10n/app_localizations_lv.dart @@ -63,6 +63,12 @@ class AppLocalizationsLv extends AppLocalizations { @override String get copySummary => 'Kopēt kopsavilkumu'; + @override + String get copyConversationId => 'Kopēt sarakstes ID'; + + @override + String get conversationIdCopied => 'Sarakstes ID nokopēts starpliktuvē'; + @override String get testPrompt => 'Testēt uzvedni'; diff --git a/app/lib/l10n/app_localizations_mk.dart b/app/lib/l10n/app_localizations_mk.dart index 315e6c3b97..401ac2c138 100644 --- a/app/lib/l10n/app_localizations_mk.dart +++ b/app/lib/l10n/app_localizations_mk.dart @@ -63,6 +63,12 @@ class AppLocalizationsMk extends AppLocalizations { @override String get copySummary => 'Копирај резиме'; + @override + String get copyConversationId => 'Копирај ID на разговорот'; + + @override + String get conversationIdCopied => 'ID на разговорот е копиран во клипборд'; + @override String get testPrompt => 'Тест подсетник'; diff --git a/app/lib/l10n/app_localizations_mr.dart b/app/lib/l10n/app_localizations_mr.dart index 48188f9f36..7dbc3f6232 100644 --- a/app/lib/l10n/app_localizations_mr.dart +++ b/app/lib/l10n/app_localizations_mr.dart @@ -63,6 +63,12 @@ class AppLocalizationsMr extends AppLocalizations { @override String get copySummary => 'सारांश कॉपी करा'; + @override + String get copyConversationId => 'संभाषण आयडी कॉपी करा'; + + @override + String get conversationIdCopied => 'संभाषण आयडी क्लिपबोर्डवर कॉपी झाला'; + @override String get testPrompt => 'टेस्ट प्रॉम्प्ट'; diff --git a/app/lib/l10n/app_localizations_ms.dart b/app/lib/l10n/app_localizations_ms.dart index 82b45eee66..d8af1f6e88 100644 --- a/app/lib/l10n/app_localizations_ms.dart +++ b/app/lib/l10n/app_localizations_ms.dart @@ -63,6 +63,12 @@ class AppLocalizationsMs extends AppLocalizations { @override String get copySummary => 'Salin ringkasan'; + @override + String get copyConversationId => 'Salin ID perbualan'; + + @override + String get conversationIdCopied => 'ID perbualan disalin ke papan klip'; + @override String get testPrompt => 'Uji Gesaan'; diff --git a/app/lib/l10n/app_localizations_nl.dart b/app/lib/l10n/app_localizations_nl.dart index 65e18bf816..b342c14a84 100644 --- a/app/lib/l10n/app_localizations_nl.dart +++ b/app/lib/l10n/app_localizations_nl.dart @@ -63,6 +63,12 @@ class AppLocalizationsNl extends AppLocalizations { @override String get copySummary => 'Kopieer samenvatting'; + @override + String get copyConversationId => 'Gesprek-ID kopiëren'; + + @override + String get conversationIdCopied => 'Gesprek-ID gekopieerd naar klembord'; + @override String get testPrompt => 'Prompt testen'; diff --git a/app/lib/l10n/app_localizations_no.dart b/app/lib/l10n/app_localizations_no.dart index 32de5692c8..15a96caac1 100644 --- a/app/lib/l10n/app_localizations_no.dart +++ b/app/lib/l10n/app_localizations_no.dart @@ -63,6 +63,12 @@ class AppLocalizationsNo extends AppLocalizations { @override String get copySummary => 'Kopier oppsummering'; + @override + String get copyConversationId => 'Kopier samtale-ID'; + + @override + String get conversationIdCopied => 'Samtale-ID kopiert til utklippstavle'; + @override String get testPrompt => 'Test prompt'; diff --git a/app/lib/l10n/app_localizations_pl.dart b/app/lib/l10n/app_localizations_pl.dart index 0376c02f51..98378353d3 100644 --- a/app/lib/l10n/app_localizations_pl.dart +++ b/app/lib/l10n/app_localizations_pl.dart @@ -63,6 +63,12 @@ class AppLocalizationsPl extends AppLocalizations { @override String get copySummary => 'Kopiuj podsumowanie'; + @override + String get copyConversationId => 'Kopiuj ID rozmowy'; + + @override + String get conversationIdCopied => 'ID rozmowy skopiowane do schowka'; + @override String get testPrompt => 'Testuj prompt'; diff --git a/app/lib/l10n/app_localizations_pt.dart b/app/lib/l10n/app_localizations_pt.dart index c23613ce4a..bb54c2aed8 100644 --- a/app/lib/l10n/app_localizations_pt.dart +++ b/app/lib/l10n/app_localizations_pt.dart @@ -63,6 +63,12 @@ class AppLocalizationsPt extends AppLocalizations { @override String get copySummary => 'Copiar resumo'; + @override + String get copyConversationId => 'Copiar ID da conversa'; + + @override + String get conversationIdCopied => 'ID da conversa copiado para a área de transferência'; + @override String get testPrompt => 'Testar prompt'; diff --git a/app/lib/l10n/app_localizations_ro.dart b/app/lib/l10n/app_localizations_ro.dart index 611b632374..dbef782885 100644 --- a/app/lib/l10n/app_localizations_ro.dart +++ b/app/lib/l10n/app_localizations_ro.dart @@ -63,6 +63,12 @@ class AppLocalizationsRo extends AppLocalizations { @override String get copySummary => 'Copiază rezumatul'; + @override + String get copyConversationId => 'Copiază ID-ul conversației'; + + @override + String get conversationIdCopied => 'ID-ul conversației a fost copiat în clipboard'; + @override String get testPrompt => 'Testează promptul'; diff --git a/app/lib/l10n/app_localizations_ru.dart b/app/lib/l10n/app_localizations_ru.dart index 819e465ff1..1e9fd0eeb4 100644 --- a/app/lib/l10n/app_localizations_ru.dart +++ b/app/lib/l10n/app_localizations_ru.dart @@ -63,6 +63,12 @@ class AppLocalizationsRu extends AppLocalizations { @override String get copySummary => 'Копировать сводку'; + @override + String get copyConversationId => 'Скопировать ID разговора'; + + @override + String get conversationIdCopied => 'ID разговора скопирован в буфер обмена'; + @override String get testPrompt => 'Тестовый запрос'; diff --git a/app/lib/l10n/app_localizations_sk.dart b/app/lib/l10n/app_localizations_sk.dart index 3707fdc154..514b1cd52d 100644 --- a/app/lib/l10n/app_localizations_sk.dart +++ b/app/lib/l10n/app_localizations_sk.dart @@ -63,6 +63,12 @@ class AppLocalizationsSk extends AppLocalizations { @override String get copySummary => 'Kopírovať zhrnutie'; + @override + String get copyConversationId => 'Kopírovať ID konverzácie'; + + @override + String get conversationIdCopied => 'ID konverzácie skopírované do schránky'; + @override String get testPrompt => 'Otestovať výzvu'; diff --git a/app/lib/l10n/app_localizations_sl.dart b/app/lib/l10n/app_localizations_sl.dart index 02f48ecba9..0032faaf28 100644 --- a/app/lib/l10n/app_localizations_sl.dart +++ b/app/lib/l10n/app_localizations_sl.dart @@ -63,6 +63,12 @@ class AppLocalizationsSl extends AppLocalizations { @override String get copySummary => 'Kopiraj povzetek'; + @override + String get copyConversationId => 'Kopiraj ID pogovora'; + + @override + String get conversationIdCopied => 'ID pogovora je bil kopiran v odložišče'; + @override String get testPrompt => 'Testiraj poziv'; diff --git a/app/lib/l10n/app_localizations_sr.dart b/app/lib/l10n/app_localizations_sr.dart index f09dad55b7..586d530562 100644 --- a/app/lib/l10n/app_localizations_sr.dart +++ b/app/lib/l10n/app_localizations_sr.dart @@ -63,6 +63,12 @@ class AppLocalizationsSr extends AppLocalizations { @override String get copySummary => 'Копирај садржај'; + @override + String get copyConversationId => 'Копирај ID разговора'; + + @override + String get conversationIdCopied => 'ID разговора је копиран у клипборд'; + @override String get testPrompt => 'Тестирај подстицај'; diff --git a/app/lib/l10n/app_localizations_sv.dart b/app/lib/l10n/app_localizations_sv.dart index 0b1a68a535..f139c5fea9 100644 --- a/app/lib/l10n/app_localizations_sv.dart +++ b/app/lib/l10n/app_localizations_sv.dart @@ -63,6 +63,12 @@ class AppLocalizationsSv extends AppLocalizations { @override String get copySummary => 'Kopiera sammanfattning'; + @override + String get copyConversationId => 'Kopiera konversations-ID'; + + @override + String get conversationIdCopied => 'Konversations-ID kopierat till urklipp'; + @override String get testPrompt => 'Testa prompt'; diff --git a/app/lib/l10n/app_localizations_ta.dart b/app/lib/l10n/app_localizations_ta.dart index 3a01685333..aedb3165a3 100644 --- a/app/lib/l10n/app_localizations_ta.dart +++ b/app/lib/l10n/app_localizations_ta.dart @@ -63,6 +63,12 @@ class AppLocalizationsTa extends AppLocalizations { @override String get copySummary => 'சாரம் நகலெடுக்கவும்'; + @override + String get copyConversationId => 'உரையாடல் ID நகலெடு'; + + @override + String get conversationIdCopied => 'உரையாடல் ID கிளிப்போர்டில் நகலெடுக்கப்பட்டது'; + @override String get testPrompt => 'தேர்வு கேட்டுகோள்'; diff --git a/app/lib/l10n/app_localizations_te.dart b/app/lib/l10n/app_localizations_te.dart index bb24a33092..b17f989ac7 100644 --- a/app/lib/l10n/app_localizations_te.dart +++ b/app/lib/l10n/app_localizations_te.dart @@ -63,6 +63,12 @@ class AppLocalizationsTe extends AppLocalizations { @override String get copySummary => 'సారాంశాన్ని కాపీ చేయండి'; + @override + String get copyConversationId => 'సంభాషణ ID కాపీ చేయండి'; + + @override + String get conversationIdCopied => 'సంభాషణ ID క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది'; + @override String get testPrompt => 'ప్రాంప్ట్‌ను పరీక్షించండి'; diff --git a/app/lib/l10n/app_localizations_th.dart b/app/lib/l10n/app_localizations_th.dart index e4f3d379e1..0b35324196 100644 --- a/app/lib/l10n/app_localizations_th.dart +++ b/app/lib/l10n/app_localizations_th.dart @@ -63,6 +63,12 @@ class AppLocalizationsTh extends AppLocalizations { @override String get copySummary => 'คัดลอกสรุป'; + @override + String get copyConversationId => 'คัดลอก ID การสนทนา'; + + @override + String get conversationIdCopied => 'คัดลอก ID การสนทนาไปยังคลิปบอร์ดแล้ว'; + @override String get testPrompt => 'ทดสอบคำสั่ง'; diff --git a/app/lib/l10n/app_localizations_tl.dart b/app/lib/l10n/app_localizations_tl.dart index ee26c62e59..aac214dc30 100644 --- a/app/lib/l10n/app_localizations_tl.dart +++ b/app/lib/l10n/app_localizations_tl.dart @@ -63,6 +63,12 @@ class AppLocalizationsTl extends AppLocalizations { @override String get copySummary => 'Kopyahin ang Buod'; + @override + String get copyConversationId => 'Kopyahin ang ID ng usapan'; + + @override + String get conversationIdCopied => 'Nakopya na ang ID ng usapan sa clipboard'; + @override String get testPrompt => 'Subukan ang Prompt'; diff --git a/app/lib/l10n/app_localizations_tr.dart b/app/lib/l10n/app_localizations_tr.dart index 5d65919a4c..aac27593ba 100644 --- a/app/lib/l10n/app_localizations_tr.dart +++ b/app/lib/l10n/app_localizations_tr.dart @@ -63,6 +63,12 @@ class AppLocalizationsTr extends AppLocalizations { @override String get copySummary => 'Özeti kopyala'; + @override + String get copyConversationId => 'Konuşma kimliğini kopyala'; + + @override + String get conversationIdCopied => 'Konuşma kimliği panoya kopyalandı'; + @override String get testPrompt => 'İstemi Test Et'; diff --git a/app/lib/l10n/app_localizations_uk.dart b/app/lib/l10n/app_localizations_uk.dart index 522829f64a..5a7085c2c5 100644 --- a/app/lib/l10n/app_localizations_uk.dart +++ b/app/lib/l10n/app_localizations_uk.dart @@ -63,6 +63,12 @@ class AppLocalizationsUk extends AppLocalizations { @override String get copySummary => 'Копіювати підсумок'; + @override + String get copyConversationId => 'Копіювати ID розмови'; + + @override + String get conversationIdCopied => 'ID розмови скопійовано в буфер обміну'; + @override String get testPrompt => 'Тестовий запит'; diff --git a/app/lib/l10n/app_localizations_ur.dart b/app/lib/l10n/app_localizations_ur.dart index 045322f0c3..5ab4a6653e 100644 --- a/app/lib/l10n/app_localizations_ur.dart +++ b/app/lib/l10n/app_localizations_ur.dart @@ -63,6 +63,12 @@ class AppLocalizationsUr extends AppLocalizations { @override String get copySummary => 'خلاصہ کاپی کریں'; + @override + String get copyConversationId => 'گفتگو کی ID کاپی کریں'; + + @override + String get conversationIdCopied => 'گفتگو کی ID کلپ بورڈ پر کاپی ہو گئی'; + @override String get testPrompt => 'ٹیسٹ پروپٹ'; diff --git a/app/lib/l10n/app_localizations_vi.dart b/app/lib/l10n/app_localizations_vi.dart index 4c4753a283..f175a12fe3 100644 --- a/app/lib/l10n/app_localizations_vi.dart +++ b/app/lib/l10n/app_localizations_vi.dart @@ -63,6 +63,12 @@ class AppLocalizationsVi extends AppLocalizations { @override String get copySummary => 'Sao chép tóm tắt'; + @override + String get copyConversationId => 'Sao chép ID cuộc trò chuyện'; + + @override + String get conversationIdCopied => 'Đã sao chép ID cuộc trò chuyện vào clipboard'; + @override String get testPrompt => 'Thử nghiệm'; diff --git a/app/lib/l10n/app_localizations_zh.dart b/app/lib/l10n/app_localizations_zh.dart index 0e69c86fd2..69bedf7f57 100644 --- a/app/lib/l10n/app_localizations_zh.dart +++ b/app/lib/l10n/app_localizations_zh.dart @@ -62,6 +62,12 @@ class AppLocalizationsZh extends AppLocalizations { @override String get copySummary => '复制摘要'; + @override + String get copyConversationId => '复制对话 ID'; + + @override + String get conversationIdCopied => '对话 ID 已复制到剪贴板'; + @override String get testPrompt => '测试提示词'; From e250ec2ef2322bfb4140a694cb5efcad29981e5d Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Fri, 1 May 2026 23:18:37 +0900 Subject: [PATCH 4/8] style(app): use clipboard icon for Copy Conversation ID menu item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Copy Transcript / Copy Summary entries already in the conversation detail three-dots menu use the outline-weight clone-document icons `FontAwesomeIcons.copy` and `FontAwesomeIcons.clone`. Switching the new Copy Conversation ID entry from `FontAwesomeIcons.fingerprint` to `FontAwesomeIcons.clipboard` keeps the three "Copy …" items as one visually coherent group and matches the snackbar wording "Conversation ID copied to clipboard". --- app/lib/pages/conversation_detail/page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/pages/conversation_detail/page.dart b/app/lib/pages/conversation_detail/page.dart index 9558f7436b..e47f12cc30 100644 --- a/app/lib/pages/conversation_detail/page.dart +++ b/app/lib/pages/conversation_detail/page.dart @@ -819,7 +819,7 @@ class _ConversationDetailPageState extends State with Ti ), PullDownMenuItem( title: context.l10n.copyConversationId, - iconWidget: FaIcon(FontAwesomeIcons.fingerprint, size: 16), + iconWidget: FaIcon(FontAwesomeIcons.clipboard, size: 16), onTap: () => _handleMenuSelection(context, 'copy_conversation_id', provider), ), if (provider.conversation.hasAudio()) From e417d7e002b9c77cbdc80ae9a6f42060c9360346 Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Fri, 1 May 2026 23:27:25 +0900 Subject: [PATCH 5/8] style(app): apply dart format to conversation detail page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Run `dart format --line-length 120` on `app/lib/pages/conversation_detail/page.dart` to satisfy the `Lint & Format Check` CI job, which now flags the file because this PR touches it. Pure formatting — no behavior change. The diff only re-wraps a few existing `?:`, named-argument, and chained-method expressions; the new Copy Conversation ID hunks added earlier in this PR are untouched. --- app/lib/pages/conversation_detail/page.dart | 29 +++++++++------------ 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/app/lib/pages/conversation_detail/page.dart b/app/lib/pages/conversation_detail/page.dart index e47f12cc30..d1adfcb2af 100644 --- a/app/lib/pages/conversation_detail/page.dart +++ b/app/lib/pages/conversation_detail/page.dart @@ -325,8 +325,8 @@ class _ConversationDetailPageState extends State with Ti final conversation = provider.conversation; final summaryContent = conversation.appResults.isNotEmpty && conversation.appResults[0].content.trim().isNotEmpty - ? conversation.appResults[0].content.trim() - : conversation.structured.toString(); + ? conversation.appResults[0].content.trim() + : conversation.structured.toString(); _copyContent(context, summaryContent); break; case 'download_audio': @@ -662,8 +662,8 @@ class _ConversationDetailPageState extends State with Ti provider.conversation.starred = newStarredState; // Update in conversation provider context.read().updateConversationInSortedList( - provider.conversation, - ); + provider.conversation, + ); // Track star/unstar action MixpanelManager().conversationStarToggled( conversation: provider.conversation, @@ -981,15 +981,13 @@ class _ConversationDetailPageState extends State with Ti child: Consumer( builder: (context, provider, child) { final conversation = provider.conversation; - final hasActionItems = conversation.structured.actionItems - .where((item) => !item.deleted) - .isNotEmpty; + final hasActionItems = + conversation.structured.actionItems.where((item) => !item.deleted).isNotEmpty; return ConversationBottomBar( mode: ConversationBottomBarMode.detail, selectedTab: selectedTab, conversation: conversation, - hasSegments: - conversation.transcriptSegments.isNotEmpty || + hasSegments: conversation.transcriptSegments.isNotEmpty || conversation.photos.isNotEmpty || conversation.externalIntegration != null, hasActionItems: hasActionItems, @@ -1423,11 +1421,9 @@ class _TranscriptWidgetsState extends State with AutomaticKee } final segments = provider.conversation.transcriptSegments; final segment = segments[segmentIndex]; - final person = segment.personId != null - ? SharedPreferencesUtil().getPersonById(segment.personId!) - : null; - final speakerName = - person?.name ?? + final person = + segment.personId != null ? SharedPreferencesUtil().getPersonById(segment.personId!) : null; + final speakerName = person?.name ?? context.l10n.speakerWithId('${TranscriptSegment.getDisplaySpeakerId(segment.speakerId, segments)}'); MixpanelManager().editSegmentTextStarted(); bool saved = false; @@ -1484,9 +1480,8 @@ class _TranscriptWidgetsState extends State with AutomaticKee ); if (segmentIndex == -1) continue; provider.conversation.transcriptSegments[segmentIndex].isUser = finalPersonId == 'user'; - provider.conversation.transcriptSegments[segmentIndex].personId = finalPersonId == 'user' - ? null - : finalPersonId; + provider.conversation.transcriptSegments[segmentIndex].personId = + finalPersonId == 'user' ? null : finalPersonId; } await assignBulkConversationTranscriptSegments( provider.conversation.id, From 3ce1a5b867c2c8e08a9a9eac7fe1555125d90fc7 Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Sat, 2 May 2026 02:42:51 +0900 Subject: [PATCH 6/8] test(app): cover Copy Conversation ID clipboard write and snackbar wording Adds `app/test/widgets/conversation_detail_copy_id_test.dart` with 4 widget tests for the new menu item: - `AppLocalizations.copyConversationId` resolves to the English label. - `AppLocalizations.conversationIdCopied` resolves to the English snackbar message. - Tapping the harness button writes the conversation id through the `Clipboard.setData` MethodChannel and shows the localized snackbar. - The snackbar wording switches to the Japanese `app_ja.arb` value when the locale is `Locale('ja')`, proving the new keys reach the generated `AppLocalizations` for non-English ARBs. Follows the existing `fair_use_page_test.dart` clipboard-mock pattern (`SystemChannels.platform` + `defaultBinaryMessenger`), uses `addTearDown` so the mock handler is reset even on test failure, and keeps the harness widget public to match the surrounding test style. The harness re-implements the `'copy_conversation_id'` switch branch in `_handleMenuSelection` rather than pumping the full `ConversationDetailPage`, which would require many providers and network mocks; the file's top-level comment notes that the harness must be kept in sync with that production branch. --- .../conversation_detail_copy_id_test.dart | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 app/test/widgets/conversation_detail_copy_id_test.dart diff --git a/app/test/widgets/conversation_detail_copy_id_test.dart b/app/test/widgets/conversation_detail_copy_id_test.dart new file mode 100644 index 0000000000..a426829442 --- /dev/null +++ b/app/test/widgets/conversation_detail_copy_id_test.dart @@ -0,0 +1,154 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:omi/l10n/app_localizations.dart'; + +/// Wraps [child] in a MaterialApp configured with all l10n delegates so +/// `AppLocalizations.of(context)!.copyConversationId` etc. resolve. +/// `locale` defaults to English; pass another supported locale (e.g. `ja`) +/// to test the localized snackbar wording. +Widget buildTestApp(Widget child, {Locale locale = const Locale('en')}) { + return MaterialApp( + locale: locale, + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + supportedLocales: AppLocalizations.supportedLocales, + home: child, + ); +} + +/// Reproduces the inline body of the `'copy_conversation_id'` branch in +/// `_handleMenuSelection` (`app/lib/pages/conversation_detail/page.dart`). +/// Keeping this harness in lockstep with the real menu item lets the +/// behavior — Clipboard write + localized snackbar — be tested without +/// pumping the full `ConversationDetailPage` widget tree (which would +/// require many providers / network mocks). +/// +/// **Sync requirement:** because this harness re-implements the production +/// branch instead of importing it, any future change to that switch case +/// (e.g. swapping `Clipboard.setData` semantics, replacing the snackbar with +/// a toast, or routing through `_copyContent`) must be mirrored here, or +/// these tests will keep passing against stale behavior. +class CopyConversationIdHarness extends StatelessWidget { + const CopyConversationIdHarness({super.key, required this.conversationId}); + + final String conversationId; + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Builder( + builder: (innerContext) { + return ElevatedButton( + onPressed: () { + Clipboard.setData(ClipboardData(text: conversationId)); + ScaffoldMessenger.of(innerContext).showSnackBar( + SnackBar( + content: Text(AppLocalizations.of(innerContext)!.conversationIdCopied), + ), + ); + }, + child: const Text('Tap to copy'), + ); + }, + ), + ), + ); + } +} + +void main() { + group('AppLocalizations strings (en)', () { + testWidgets('copyConversationId exposes the menu label', (tester) async { + late AppLocalizations l10n; + await tester.pumpWidget( + buildTestApp( + Builder( + builder: (context) { + l10n = AppLocalizations.of(context)!; + return const SizedBox.shrink(); + }, + ), + ), + ); + expect(l10n.copyConversationId, 'Copy Conversation ID'); + }); + + testWidgets('conversationIdCopied exposes the snackbar message', (tester) async { + late AppLocalizations l10n; + await tester.pumpWidget( + buildTestApp( + Builder( + builder: (context) { + l10n = AppLocalizations.of(context)!; + return const SizedBox.shrink(); + }, + ), + ), + ); + expect(l10n.conversationIdCopied, 'Conversation ID copied to clipboard'); + }); + }); + + group('Copy Conversation ID action', () { + testWidgets('writes the conversation id to the system clipboard', (tester) async { + String? copied; + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( + SystemChannels.platform, + (MethodCall call) async { + if (call.method == 'Clipboard.setData') { + copied = (call.arguments as Map)['text'] as String?; + } + return null; + }, + ); + // Use addTearDown so the mock handler is reset even if the test fails + // partway through, preventing leakage into the next testWidgets case. + addTearDown(() { + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, null); + }); + + const conversationId = 'conv_2026demo_abcdef0123456789'; + await tester.pumpWidget( + buildTestApp(const CopyConversationIdHarness(conversationId: conversationId)), + ); + + await tester.tap(find.text('Tap to copy')); + await tester.pump(); + + expect(copied, conversationId); + expect(find.text('Conversation ID copied to clipboard'), findsOneWidget); + }); + + testWidgets('snackbar wording is localized for non-English locales', (tester) async { + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( + SystemChannels.platform, + (MethodCall call) async => null, + ); + addTearDown(() { + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, null); + }); + + await tester.pumpWidget( + buildTestApp( + const CopyConversationIdHarness(conversationId: 'irrelevant'), + locale: const Locale('ja'), + ), + ); + + await tester.tap(find.text('Tap to copy')); + await tester.pump(); + + // Value comes from app/lib/l10n/app_ja.arb and proves the generated + // AppLocalizations actually surfaces the new key in non-English ARBs. + expect(find.text('会話IDをクリップボードにコピーしました'), findsOneWidget); + }); + }); +} From 2b68d305130e78ef3add1bdeeb0427a287200bdf Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Sat, 2 May 2026 14:50:34 +0900 Subject: [PATCH 7/8] test(app): mirror HapticFeedback.lightImpact() in Copy Conversation ID harness The `'copy_conversation_id'` branch in `_handleMenuSelection` (`app/lib/pages/conversation_detail/page.dart`) calls three side effects in order: `Clipboard.setData`, `ScaffoldMessenger.showSnackBar`, and `HapticFeedback.lightImpact()`. The widget-test harness only reproduced the first two, leaving the haptic step out of sync. The file's own top-level "sync requirement" comment explicitly says the harness must mirror that production branch, so add the missing `HapticFeedback.lightImpact()` call. No other behavior change. --- app/test/widgets/conversation_detail_copy_id_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/app/test/widgets/conversation_detail_copy_id_test.dart b/app/test/widgets/conversation_detail_copy_id_test.dart index a426829442..ab0397a425 100644 --- a/app/test/widgets/conversation_detail_copy_id_test.dart +++ b/app/test/widgets/conversation_detail_copy_id_test.dart @@ -54,6 +54,7 @@ class CopyConversationIdHarness extends StatelessWidget { content: Text(AppLocalizations.of(innerContext)!.conversationIdCopied), ), ); + HapticFeedback.lightImpact(); }, child: const Text('Tap to copy'), ); From c9e85e9ae91d26fa60ee9babb2e5ad23b03df135 Mon Sep 17 00:00:00 2001 From: Yasuhisa Yoshida Date: Tue, 5 May 2026 02:18:49 +0900 Subject: [PATCH 8/8] style(l10n): keep app_lt.arb alphabetical for Copy Conversation ID keys `app_lt.arb` is the only translation that orders its keys alphabetically rather than by the chronological/grouped layout used by the other ARB files. The previous insertion of `copyConversationId` / `conversationIdCopied` directly after `copySummary` matched the other 48 ARBs but broke `app_lt.arb`'s own convention. Move the two keys into their alphabetical homes within `app_lt.arb` only: - `conversationIdCopied` between `conversationEvents` and `conversationLinkCopiedToClipboard` (`con*` group). - `copyConversationId` between `copyConfig` and `copyErrorMessage` (`copy*` group). Pure ordering change inside `app_lt.arb`; no values, translations, or keys are added/removed. The other 48 ARBs are untouched. --- app/lib/l10n/app_lt.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/l10n/app_lt.arb b/app/lib/l10n/app_lt.arb index 280556d7c9..eecb75ccce 100644 --- a/app/lib/l10n/app_lt.arb +++ b/app/lib/l10n/app_lt.arb @@ -502,6 +502,7 @@ "conversationEndAfterMinutes": "Pokalbiai dabar bus baigiami po {minutes} minutės(-ių) tylos", "conversationEndsManually": "Pokalbis baigsis tik rankiniu būdu.", "conversationEvents": "Pokalbio įvykiai", + "conversationIdCopied": "Pokalbio ID nukopijuotas į mainų sritį", "conversationLinkCopiedToClipboard": "Pokalbio nuoroda nukopijuota į iškarpinę", "conversationNewIndicator": "Naujas 🚀", "conversationNoSummaryYet": "Šis pokalbis dar neturi santraukos.", @@ -529,12 +530,11 @@ "copiedToClipboard": "{title} nukopijuota į iškarpinę", "copy": "Kopijuoti", "copyConfig": "Kopijuoti konfigūraciją", + "copyConversationId": "Kopijuoti pokalbio ID", "copyErrorMessage": "Kopijuoti klaidos pranešimą", "copyKey": "Kopijuoti raktą", "copyLink": "Kopijuoti nuorodą", "copySummary": "Kopijuoti santrauką", - "copyConversationId": "Kopijuoti pokalbio ID", - "conversationIdCopied": "Pokalbio ID nukopijuotas į mainų sritį", "copyToClipboard": "Kopijuoti į iškarpinę", "copyTranscript": "Kopijuoti transkripciją", "copyUrl": "Kopijuoti URL",